首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在我的头脑结束时,试图创建我的第一个MySQL存储过程

在我的头脑结束时,试图创建我的第一个MySQL存储过程
EN

Database Administration用户
提问于 2020-10-23 23:39:37
回答 2查看 133关注 0票数 3

我试图在MySQL 5.5.8中创建一个存储过程。使用连接器8.0.13。一旦这个过程被调试,它将被嵌入到一个c#.net应用程序中,每次设置程序时都要动态创建它。现在,我正在手动操作。

对于像我这样有MS、Oracle和DB2背景的人来说,这是很有挑战性的。我诚实地阅读了MySQL开发文档,并在googled上搜索了MySQL的语法。我收集到的是:

  • 我必须将分隔符更改为类似于//
  • 我应该使用if not exists以防万一
  • 参数不以@开头,它们必须是括号的
  • 我用临时分隔符//结束这个块,然后将它恢复到;

这就是我得出的结论:

代码语言:javascript
复制
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 )。

以下是我尝试过的:

  • Ran没有划界器
  • 移除if not exists
  • 删除实体名称周围的反引号
  • 插入values()而不是select,即使独立插入有效

我知道,对于一个经验丰富的MySQL开发人员来说,这是完全显而易见的事情,但这让像我这样有着不同背景的人无法理解。我是否使用了5.5.8中不存在的任何功能,或者我的代码中是否有bug?

EN

回答 2

Database Administration用户

发布于 2020-10-27 18:07:51

当我放弃通过SquirrelSQL创建存储过程并安装了MySQL GUI工具时,我就能够使用完全相同的源创建这个过程,方法是使用目录、选择我的模式、切换到存储过程选项卡,然后单击最底层的create按钮。

票数 0
EN

Database Administration用户

发布于 2021-01-21 20:49:39

检查手册中是否有正确的语法。

1064正是指向“如果不存在”;这种语法在MySQL中不可用。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/278595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档