我试图在MySQL 5.5.8中创建一个存储过程。使用连接器8.0.13。一旦这个过程被调试,它将被嵌入到一个c#.net应用程序中,每次设置程序时都要动态创建它。现在,我正在手动操作。
对于像我这样有MS、Oracle和DB2背景的人来说,这是很有挑战性的。我诚实地阅读了MySQL开发文档,并在googled上搜索了MySQL的语法。我收集到的是:
//的if not exists以防万一@开头,它们必须是括号的//结束这个块,然后将它恢复到;。这就是我得出的结论:
delimiter //
create procedure if not exists `logging`.`logEntry`(
in hostName varchar(512)
,in entryDateTime datetime
,in entryText varchar(1024)
,out return_value int
)
begin
insert into `logging`.`log` (hostName, entryDateTime, entryText) select hostName, entryDateTime, entryText;
set return_value = last_insert_id();
select return_value;
end//
delimiter ;当我在SquirrelSQL中运行上述代码时,服务器将引发以下错误:
错误:您的SQL语法有错误;请检查与您的MySQL服务器版本对应的手册,以获得在“如果不存在loging.logEntry`( hostName varchar(512),在entryDat”中)附近使用的正确语法( SQLState: 42000 ErrorCode: 1064 )。
以下是我尝试过的:
if not existsvalues()而不是select,即使独立插入有效我知道,对于一个经验丰富的MySQL开发人员来说,这是完全显而易见的事情,但这让像我这样有着不同背景的人无法理解。我是否使用了5.5.8中不存在的任何功能,或者我的代码中是否有bug?
发布于 2020-10-27 18:07:51
当我放弃通过SquirrelSQL创建存储过程并安装了MySQL GUI工具时,我就能够使用完全相同的源创建这个过程,方法是使用目录、选择我的模式、切换到存储过程选项卡,然后单击最底层的create按钮。
发布于 2021-01-21 20:49:39
检查手册中是否有正确的语法。
1064正是指向“如果不存在”;这种语法在MySQL中不可用。
https://dba.stackexchange.com/questions/278595
复制相似问题