当我运行此代码时,它给了我错误。从这段代码中,有几项任务要做: (1)如果c_id = 1,则通过将地址设置为'90 TYT'来更新客户 (2)查看order_no,status,c_id,item_total备注。 (3)如果item_total 0,则通过设置remarks ='UNAVAILABLE'更新表order_status,否则选择order_no,status,item_total,remarks where status ='waiting'。
请帮我修复错误。我是SQL的新手。
#drop procedure if exists usp_GetAnything;
delimiter //
create procedure usp_GetAnything()
begin
select c_id,lname,address,city
from customer;
update customer
set address = '90 TYT'
where c_id = 1;
select o.order_no,o.o_status,c.c_id,o.item_total,o.remarks
from customer c, order_status o
where c.c_id=o.c_id;
if (o.item_total > 0) then
update order_status o
set remarks = 'UNAVAILABLE'
where order_no > '123';
else
select order_no,o_status,item_total,remarks
from order_status
where o_status = 'waiting';
end if;
end
答案 0 :(得分:0)
它失败了:
if (o.item_total > 0)
o
在上一个select
子句之外未被识别,包括所有选定的变量。
要使用上一次选择返回的结果,您应该select ... INTO...
(将结果参数选择为声明的局部变量)。
您可以在以下示例中找到 here :
DELIMITER //
CREATE PROCEDURE `proc_WHILE` (IN param1 INT)
BEGIN
DECLARE variable1, variable2 INT;
SET variable1 = 0;
WHILE variable1 < param1 DO
INSERT INTO table1 VALUES (param1);
SELECT COUNT(*) INTO variable2 FROM table1;
SET variable1 = variable1 + 1;
END WHILE;
END //
您可以看到variable1
和variable2
在程序开始时声明,稍后与select ... INTO ...
一起使用。