【问题标题】:Procedure breaking when trying to import into DB尝试导入数据库时​​程序中断
【发布时间】:2016-04-18 09:03:32
【问题描述】:

我有以下过程,当我手动导入时,由于某种未知原因而中断。

CREATE PROCEDURE `register_house`(  
 IN UID CHAR(17),
 IN new_username VARCHAR(16),
 IN new_signature CHAR(64),
 IN email VARCHAR(128),
 IN postcode VARCHAR(16),
 IN customer_name VARCHAR(45),
 IN phone_number VARCHAR(16)
)
BEGIN
UPDATE bb.checkin SET username = new_username, signature = new_signature WHERE _site = UID;
END

我在 Mysql Workbench 中收到以下错误 -

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 11

有人可以提出问题所在吗?

更新

按照建议,我已修改为包含 DELIMITER,现在出现以下错误:

 Error Code: 1728. Cannot load from mysql.proc. The table is probably corrupted

这些表看起来都正确,如果它们以某种方式损坏,它们是“消除”它们的方法吗?

【问题讨论】:

  • 您的过程中缺少分隔符,例如 $$...
  • END 命令之后?我尝试添加 $$,但仍然没有喜悦:(
  • 不仅仅是END 的$$(双关语)。在CREATE PROCEDURE之前你也设置了DELIMITER $$吗?

标签: mysql database xampp mysql-workbench mariadb


【解决方案1】:

基于https://stackoverflow.com/a/639356/2381157,试试这个

delimiter //

CREATE PROCEDURE `register_house2`(  
 IN UID CHAR(17),
 IN new_username VARCHAR(16),
 IN new_signature CHAR(64),
 IN email VARCHAR(128),
 IN postcode VARCHAR(16),
 IN customer_name VARCHAR(45),
 IN phone_number VARCHAR(16)
)
BEGIN
UPDATE bb.checkin SET username = new_username, signature = new_signature WHERE _site = UID;
END
//

delimiter ;

它在 MySQL 5.5 中对我有用

【讨论】:

    【解决方案2】:

    这对我有用...

    将此添加到第 1 行语句的开头;

    DELIMITER $$
    

    然后是版本

    END $$
    

    最后,为了修复“损坏”消息,我只需运行以下文件:

    C:\xampp\mysql\bin\mysql_upgrade.exe
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 2021-09-20
      • 1970-01-01
      相关资源
      最近更新 更多