【问题标题】:How do I create a stored procedure in heidisql?如何在 heidisql 中创建存储过程?
【发布时间】:2016-06-15 05:23:23
【问题描述】:

我正在尝试在 heidisql (mysql) 中创建一个存储过程。

CREATE PROCEDURE SP_FORM20_POST(
    P_SESSIONID     VARCHAR(256)
)
BEGIN
    INSERT INTO tbForm20
        ( SESSIONID, RegDT)
    VALUES
        ( P_SESSIONID, NOW()); 
END

这是我的查询。我正在尝试创建此过程,但出现了一些错误:

错误码是1064

您的 SQL 语法有错误;查看与您的 MariaDB 服务器版本相对应的手册,了解在第 8 行附近使用的正确语法。

但是,我不知道语法错误。怎么了?

我想在 heidisql 工具中取得成功。我不想要其他数据库工具。 请帮帮我。

【问题讨论】:

  • 你解决了吗?你对我的回答有什么反馈吗?您是新人,尚未使用表示问题已回答的绿色复选标记标记任何答案(如果是这样的话)。
  • 对不起,太晚了。它仍然出现同样的错误。所以我使用toad for mysql而不是heidisql。谢谢您的回答。美好的一天!

标签: mysql stored-procedures heidisql


【解决方案1】:

该查询中的问题是分号,它是默认查询分隔符。

为了改变HeidiSQL中的分隔符,在CREATE PROCEDURE查询上面添加DELIMITER客户端命令:

DELIMITER \\
SELECT 1\\
CREATE PROCEDURE ...\\
DELIMITER ;

HeidiSQL也有程序设计器,无需设置分隔符:

【讨论】:

    【解决方案2】:

    问题是这样的。数据库读取代码中的; 作为过程的结束。你可能不打算这样:)。 DELIMITER 命令通过将 ; 更改为可自定义的东西来处理这个问题,例如 $$。试试这个:

    DELIMITER $$
    CREATE PROCEDURE SP_FORM20_POST(
        P_SESSIONID     VARCHAR(256)
    )
    BEGIN
        INSERT INTO tbForm20
            ( SESSIONID, RegDT)
        VALUES
            ( P_SESSIONID, NOW()); 
    END$$
    DELIMITER ;
    

    【讨论】:

      【解决方案3】:

      试试这个

      DELIMITER //
      
      CREATE PROCEDURE SP_FORM20_POST(
          P_SESSIONID     VARCHAR(256)
      )
      
      BEGIN
          INSERT INTO tbForm20
              ( SESSIONID, RegDT)
          VALUES
              ( P_SESSIONID, NOW());
      
      END //
      
      DELIMITER;
      

      【讨论】:

      • 这个答案与最受欢迎的答案有何不同?
      • @user1781290 旧评论,但此答案将分隔符设置回;,而最受支持的则将其保留为$$
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-02
      • 1970-01-01
      • 1970-01-01
      • 2011-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多