【问题标题】:HeidiSQL Not Accepting Stored ProcedureHeidiSQL 不接受存储过程
【发布时间】:2019-05-13 07:59:26
【问题描述】:

所以,我基本上有这个程序:

CREATE PROCEDURE NotificationLog(IN `Timestamp` BIGINT, IN UnitID INT, IN Content VARCHAR(50), IN `LEVEL` TINYINT, IN Solved INT, IN Sector TINYINT)
MODIFIES SQL DATA
BEGIN
    DECLARE newId INT;
    INSERT INTO `logs` VALUES (NULL, `Timestamp`, `UnitID`);
    SET newId = LAST_INSERT_ID();
    INSERT INTO notificationlogs VALUES (newId, Content, `Level`, Solved, Sector);
END;

但是有一个错误,当我在 Heidi SQL 10(我用来管理数据库)的查询选项卡上运行它时,它给了我错误:

SQL 错误 (1064):您的 SQL 语法有错误;检查 与您的 MariaDB 服务器版本相对应的手册 第 4 行 " 附近的语法

这是有史以来最无用的无信息消息。我不知道语法有什么问题,因为这个错误什么也没说。

语法有问题吗? MariaDB 上的文档对带有临时变量的存储过程没有太大帮助。

编辑:这似乎是 HeidiSQL 问题而不是 MariaDB,更改了问题标题。

【问题讨论】:

  • 也许你在第 4 行有一些不可见的字符,尝试从这里复制代码,看看它是否有效。
  • 已经这样做了。但是你知道这在其他数据库中是否有效吗?

标签: sql stored-procedures mariadb heidisql


【解决方案1】:

我使用 HeidiSQL 的 GUI 工具来创建程序,它为我生成了以下代码:

CREATE DEFINER=`root`@`localhost` PROCEDURE `CreateNotificationLog`(
    IN `Timestamp` BIGINT,
    IN `UnitID` INT,
    IN `Content` VARCHAR(50),
    IN `Level` TINYINT,
    IN `Solved` BIT,
    IN `Sector` TINYINT


)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
    DECLARE newId INT;
    INSERT INTO `logs` VALUES (NULL, `Timestamp`, `UnitID`);
    SET newId = LAST_INSERT_ID();
    INSERT INTO notificationlogs VALUES (newId, Content, `Level`, `Solved`, Sector);
END

虽然这可行,但我仍然想知道我的手写代码出了什么问题。

【讨论】:

  • 也许在 Heidi SQL 中,结尾的分号会影响某些东西 (END <> END;)。
  • 仍然报错。我假设这是一个 MariaDB 错误。
  • 我无法重现该问题,请参阅dbfiddle
  • 那么可能是 HeidiSQL 的错误?你能在 HeidiSQL 上试试吗?
猜你喜欢
  • 1970-01-01
  • 2019-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-11
  • 1970-01-01
  • 1970-01-01
  • 2020-02-18
相关资源
最近更新 更多