我收到错误代码:1327。
Undeclared variable; order_id.
我一直在看代码几个小时,无法弄清楚错误会在哪里。我认为它可能链接到Select last insert()..
USE Data_Name
DROP PROCEDURE IF EXISTS test;
DELIMITER //
PROCEDURE test()
BEGIN
DECLARE sql_error INT DEFAULT FALSE;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
SET sql_error = TRUE;
START TRANSACTION;
INSERT INTO orders VALUES
(DEFAULT, 3, NOW(), '10.00', '0.00', NULL, 4,
'American Express', '378282246310005', '04/2013', 4);
SELECT LAST_INSERT_ID()INTO order_id;
INSERT INTO order_items VALUES
(DEFAULT, order_id, 6, '415.00', '161.85', 1);
INSERT INTO order_items VALUES
(DEFAULT, order_id, 1, '699.00', '209.70', 1);
IF sql_error = FALSE THEN
COMMIT;
SELECT 'The transaction was committed.';
ELSE
ROLLBACK;
SELECT 'The transaction was rolled back.';
END IF;
END//
答案 0 :(得分:0)
您需要在程序中使用一行来声明变量:
DECLARE order_id BIGINT UNSIGNED;
我选择的类型为BIGINT UNSIGNED
,因为它是LAST_INSERT_ID()
根据documentation返回的类型。
另外,请确保将该变量命名为与order_items
表格中任何列名称不同的内容,否则INSERT
语句中对该变量的引用不会知道是否你的意思是使用变量或表的列。
答案 1 :(得分:0)
您必须替换
DECLARE sql_error INT DEFAULT FALSE;...
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
SET sql_error = TRUE;...
IF sql_error = FALSE THEN....
与
DECLARE order_id BIGINT UNSIGNED;...
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
SET order_id = TRUE;...
IF order_id = FALSE THEN...
接下来,关注INSERT语句并更改为order_items1和order_items2。
实施例
INSERT INTO order_items1 VALUES
(DEFAULT, order_id, 6, '415.00', '161.85', 1);
INSERT INTO order_items2 VALUES
(DEFAULT, order_id, 1, '699.00', '209.70', 1);