在shell脚本执行sql语句为啥会报错
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在shell脚本执行sql语句为啥会报错相关的知识,希望对你有一定的参考价值。
shell执行sql语句出错一般两种原因。1、一种是语句本身错误,这个你就需要仔细检查语句了。
2、语句结尾需要用英文逗号结束,否则是执行不过去的。
综上所述:仔细检查自己所写的sql语句。 参考技术A 你没有理解输入重定向的概念。在你上面的代码中,mysql -uDDAP -p$2是包含在输入重定向范围内的,所以不会提示你输入密码的。
你的$1 和$2也没有定义,可以参考如下写法:
#!/bin/sh
read -p "please input root password" pwd
mysql -uroot -p$pwd << EOF
\. /usr/src/DDAP-1.CreateUser.SQL
\. /usr/src/DDAP-2.CreateDatabase.SQL
\. /usr/src/DDAP-3.CreateTable.SQL
\. /usr/src/DDAP-4.CreateProcedureAndFunction.SQL
\. /usr/src/DDAP-5.CreateData.SQL
EOF 参考技术B 语法错了
肯定报错啊 参考技术C 你可以先把SQL语句先设置成变量,然后在调用变量执行本回答被提问者采纳
为啥我的 SQL 存储过程在没有结果时会报错?
【中文标题】为啥我的 SQL 存储过程在没有结果时会报错?【英文标题】:Why does my SQL stored procedure give an error when no result?为什么我的 SQL 存储过程在没有结果时会报错? 【发布时间】:2019-03-22 16:53:07 【问题描述】:我正在尝试制作一个简单的存储过程,如果某个参数 (pFirstPosition) 是某个值,我会使用其他一些参数作为过滤器进行选择。 SELECT 仅在至少有一行时才起作用。问题是没有行时返回 null 而不是返回错误。我正在将 MariaDB 与 phpMyAdmin 一起使用,我遇到的错误是
静态分析:
在分析过程中发现了 1 个错误。
缺少表达式。 (位置 25 附近的“ON”) SQL查询:
SET FOREIGN_KEY_CHECKS = ON;
MySQL 说:
#2014 - 命令不同步;你现在不能运行这个命令
这是我的存储过程:
BEGIN
IF pFirstPosition = 'Top' THEN
SELECT Leader,GameMode,Language.Name,MinRank,MaxRank from Lobby
inner join Lobby_Position on Lobby.LobbyPositionId =
Lobby_Position.LobbyPositionId
inner join Language on Lobby.LanguageId = Language.LanguageId
WHERE Lobby.MinRank <= pUserRank
AND Lobby.MaxRank >= pUserRank
AND Language.Name = pLanguage
AND GameMode = pGamemode;
End IF;
End
谢谢
【问题讨论】:
你不能在查询中使用BEGIN
和IF
,它们只能在存储过程和触发器中使用。
SET FOREIGN_KEY_CHECKS = 1
@Barmar 抱歉,我说的是查询,但它在存储过程中。就像我说的,它可以工作,除非它什么都不返回,这会引发错误
@FrankerZ FOREIGN_KEY_CHECKS 已经设置为 1 (ON),我尝试了我的存储过程,将其关闭,但它并没有真正改变任何东西
您不能将其设置为开启。 1 = 开,0 = 关
【参考方案1】:
“LANGUAGE”是保留字,所以用反引号引用:
inner join `Language` on Lobby.LanguageId = Language.LanguageId
【讨论】:
我试过了但没有任何改变,我发现在PHP中调用它仍然有效,所以我认为这是一个phpmyadmin的问题 向 phpmyadmin 提交错误报告。【参考方案2】:显然是 phpmyadmin bug that got fixed recently
【讨论】:
以上是关于在shell脚本执行sql语句为啥会报错的主要内容,如果未能解决你的问题,请参考以下文章