【问题标题】:Mysql Create Insert Procedure Statement incompleteMysql 创建插入过程语句不完整
【发布时间】:2019-02-24 00:05:55
【问题描述】:

我正在尝试为我的数据库编写一个小日志程序。我用这个语句创建了一个程序:

 create procedure prc_wirte_log (
    in p_schema varchar(255),
    in p_item varchar(255),
    in p_message varchar(255)
)
begin
    insert into weather.log (`schema`, item, message) values (p_schema, p_item, p_message);
end;

我收到错误Error Code: 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 '' at line 7 0.063 sec

为什么? MySQL Workbench 表示插入查询后的Incomplet Statment: excepting ;

我能做什么?

【问题讨论】:

  • 多语句过程(假设存在BEGIN...END)需要分隔符覆盖,以防止它们包含的语句过早终止过程定义。
  • 很好,这对我有用。分隔符的作用是什么?谢谢

标签: sql stored-procedures mariadb procedure


【解决方案1】:

多语句过程(假设存在 BEGIN...END)需要分隔符覆盖,以防止它们包含的语句过早终止过程定义。

通常,您需要执行以下操作:

DELIMITER //

CREATE PROCEDURE blah()
BEGIN
   statements;
END//

DELIMITER ;

here 文档中的第一个示例演示了这一点(尽管该页面上的最后两个似乎重复了您的错误。

【讨论】:

  • 谢谢。只需在顶部添加“DELIMITER //”语句即可解决我的问题。
【解决方案2】:

如果您使用 WorkBench 或类似工具,只需右键单击 StoredProcedures 并单击创建存储过程,该工具将创建如下所示的默认结构,您可以编写逻辑并点击应用。确保在最后一条语句的末尾使用分号(就在 END 之前)。

CREATE PROCEDURE `new_procedure` ()
BEGIN
select * from tasks;
END

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    相关资源
    最近更新 更多