如何在Oracle中进行更新循环

问题描述 投票:0回答:2

我正在尝试了解有关使用Oracle的更多信息,我正在尝试了解循环以及如何使用它们。我有这个:

loop
update table
set amount=(amount+3)
exit when amount>=20
end loop;

目前金额是12,所以我希望它增加3到金额,直到它达到21,因为那时它将大于20.但我得到的错误是“ORA-00933:SQL命令未正确结束”我已经还有循环和退出加下划线的红色。

我错过了一些简单的东西,还是我误解了如何使用循环?

oracle plsql oracle11g
2个回答
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

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

© www.soinside.com 2019 - 2024. All rights reserved.