mysql phpmyadmin 中的存储过程 #1064

Posted

技术标签:

【中文标题】mysql phpmyadmin 中的存储过程 #1064【英文标题】:Stored Procedure in mysql phpmyadmin #1064 【发布时间】:2020-02-26 02:21:26 【问题描述】:

我在phpmyadmin中尝试在mysql中写一个存储过程,遇到了错误:

DELIMITER //
DROP PROCEDURE IF EXISTS USP_SwitchTable //
CREATE PROCEDURE USP_SwitchTable(IN idTable1 INT, IN idTable2 INT)
AS BEGIN
    DECLARE idFirstBill INT;
    DECLARE idSecondBill INT;
    SELECT idFirstBill = id FROM bill WHERE id_table = idTable1 AND status = 0;
    SELECT idSecondBill = id FROM bill WHERE id_table = idTable2 AND status = 0;

    IF (idFirstBill IS NULL)
    BEGIN
    INSERT bill (id_table, bill_maker, status) VALLUES (idTable1, 1, 0);
    SELECT idFirstBill = MAX(id) FROM bill WHERE id_table = idTable1 AND status = 0;
    END


    IF (idSecondBill  IS NULL)
    BEGIN
    INSERT bill (id_table, bill_maker, status) VALLUES (idTable2, 1, 0);
    SELECT idSecondBill = MAX(id) FROM bill WHERE id_table = idTable2 AND status = 0;
    END

    SELECT id INTO IDBillInfoTable FROM bill_info WHERE id_bill = idSecondBill;

    UPDATE bill_info SET id_bill = idSecondBill WHERE id_bill = idFirstBill;

    UPDATE bill_info SET id_bill = idFirstBill WHERE id IN (SELECT * FROM IDBillInfoTable);

    DROP TABLE IDBillInfoTable;

END//
DELIMITER ;

这就是它所说的:

错误 #1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以了解在“开始插入账单(id_table、bill_maker、状态)VALLUES(idTable1、1、0)附近使用的正确语法;”在第 9 行

我能做些什么来解决这个问题?我是新手,谢谢大家

【问题讨论】:

【参考方案1】:

MySQL IF 子句使用THEN END IF 而不是BEGINEND

您可能还想为IDBillInfoTable 使用临时表,以便它可以同时使用。

IF (idSecondBill  IS NULL) THEN
  INSERT INTO bill (id_table, bill_maker, status) 
  VALUES (idTable2, 1, 0);

  SELECT MAX(id) into idSecondBill
  FROM bill 
  WHERE id_table = idTable2 AND status = 0;
END IF;

和临时表创建:

CREATE TEMPORARY TABLE IDBillInfoTable AS 
SELECT id
FROM bill_info 
WHERE id_bill = idSecondBill;

并删除临时表

DROP TEMPORARY TABLE IDBillInfoTable;

【讨论】:

以上是关于mysql phpmyadmin 中的存储过程 #1064的主要内容,如果未能解决你的问题,请参考以下文章

在 phpmyadmin 中从 mysql 命令行调用 mysql 存储过程

在 MySql/phpmyadmin 中创建存储过程

重新登录到 phpmyadmin 后,存储过程在 mysql 中消失了

尝试在 phpmyadmin 中执行 MYSQL 存储过程时出错

phpmyadmin 中的存储过程

mysql程序没有使用phpmyadmin创建/工作