我正在尝试了解有关使用Oracle的更多信息,我正在尝试了解循环以及如何使用它们。我有这个:
loop
update table
set amount=(amount+3)
exit when amount>=20
end loop;
目前金额是12,所以我希望它增加3到金额,直到它达到21,因为那时它将大于20.但我得到的错误是“ORA-00933:SQL命令未正确结束”我已经还有循环和退出加下划线的红色。
我错过了一些简单的东西,还是我误解了如何使用循环?
您应该使用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
我知道这里的目标是学习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。