我试图了解有关使用Oracle的更多信息,并且我试图了解循环以及如何使用它们。我有这个:
loop
update table
set amount=(amount+3)
exit when amount>=20
end loop;
目前金额为12,所以我预计它会增加3到金额,直到它达到21,因为那时它将大于20.但我得到的错误是" ORA-00933:SQL命令没有正确结束"我也得到了循环并以红色下划线标出。
我是否遗漏了一些简单的内容,或者我误解了如何使用循环?
答案 0 :(得分:2)
您应该使用BEGIN..END
块来编写PL / SQL。要通过循环模拟更新操作,可以将RETURNING INTO
子句与变量一起使用。
虽然这个解决方案是为了您的理解,但实时并不是像这样在循环中运行Update语句的有效方法。运行设置最终值的单个更新语句会更好。
注意:这适用于单行更新。
SET SERVEROUTPUT ON
DECLARE
v_amount NUMBER;
BEGIN
LOOP
UPDATE yourtable
SET amount = amount + 3 -- WHERE clause
RETURNING amount
INTO v_amount;
DBMS_OUTPUT.PUT_LINE(v_amount);
EXIT when v_amount >= 20;
END LOOP;
END;
/
15
18
21
答案 1 :(得分:0)
我理解这里的目标是学习Oracle中的LOOP,但选择的例子并不理想。您可能需要查看ContextSwitching。尽量避免在循环内部发出SQL / DML。也永远不要使用PL / SQL来执行可以使用SQL完成的操作,除非它花费太多的CPU。
update yourtable
set amount = amount + trunc((20 - amount)/3) * 3
where amount <= 20;
commit;
相反,我建议以结构化方式开始学习Oracle中的LOOP的好地方是使用OracleDocumentation。