mysql - mysql phpmyadmin 中的存储过程 #1064
问题描述
我正在尝试在 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、状态)值(idTable1、1、0)附近使用的正确语法;” 在第 9 行
我能做些什么来解决这个问题?我对这个有点新,谢谢大家
解决方案
MySQL IF 子句使用andTHEN
END IF
代替。BEGIN
END
您可能还想使用临时表,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;
推荐阅读
- xml - XSLT:如何删除具有相同属性值的重复元素,并且元素具有相同的名称和值
- bottleneck - 证明收缩权重小于瓶颈距离的边缘不会改变瓶颈距离
- laravel - 自定义控制器方法的 Laravel 策略失败
- mysql - 使用不带 CTE 或 * 的行号更新表列,
- aggregate - 聚合事件溯源的版本
- python-3.x - Python/Raspbian - 为什么对象 SPI 属性 (_spi_seq) 在 Buster python 3.7.3 而不是 Jessie python 3.4.2 上发生变化 - 可能是 spidev 问题
- python - 如何将 Fabric 命令结果存储到 pandas 数据框中
- angular - 压缩图像后 reader.onload 不会重置
- c# - 使用 azure graph api 获取具有用户所属组 id 的所有用户的列表
- sed - 在每行末尾附加特定字符