我想运行sql脚本,其中包括db和表创建以及存储过程创建。但是当我尝试使用执行sql脚本关键字在数据库库中运行sql脚本时,我会得到一个错误,如下所示
ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DELIMITER $$\n CREATE OR
REPLACE PROCEDURE `proc_GetCustomerDetails`(\n I...' at line 2")在过程之前,我有这样的分隔符,
DELIMITER $$
CREATE OR REPLACE PROCEDURE `proc_GetCustomerDetails`(
IN CustomerNbr LONGTEXT,
IN Lang VARCHAR(5)
)
DETERMINISTIC
BEGIN
IF Lang IS NULL THEN SET lang = "fin";
END IF;
SELECT * from dbname.customer;
END;$$
DELIMITER ;如果我注释存储过程部件,则sql文件运行时不会出现其他表创建语句的错误。
我搜索了这个,找不到任何相关的问题。我看到我们有call存储过程关键字。但是我希望将表创建和存储过程保存在同一个sql文件中,并且需要运行。我使用MariaDB来完成这个任务。
图书馆使用,
如果我使用HeidiSQL运行sql文件,则运行过程和分隔符时不会出现任何错误。这意味着没有sql错误。
,谁能告诉我怎么解决这个问题吗?
发布于 2022-03-24 04:36:46
分隔符是只支持客户端的语句,服务器不支持它;因此出现错误。解决办法-放下它。
这是a question with very good answers,它是什么,为什么需要它。
简而言之,当您与客户机一起工作时,您需要一种方法来指示它:“这不是您应该立即执行的语句,这仍然是您要发送到服务器的SP中的一行”--所以您告诉(客户端)“分隔符b/n语句是临时的$$”。服务器不需要/关心这一点-它知道CREATE PROCEDURE, BEGIN, END之间的所有东西都是连接的语句,一个块。
当您通过API (pymysql)与交互式客户端(shell、heidisql等)连接到DB时--您将SP作为一个块发送,不可能一个接一个地运行它的语句,因此不需要划界器,而不是服务器支持的命令,并生成一个错误。放下。
https://stackoverflow.com/questions/71582315
复制相似问题