如何在Oracle中进行更新循环

时间:2018-03-05 15:49:08

标签: oracle plsql oracle11g

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

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

目前金额为12,所以我预计它会增加3到金额,直到它达到21,因为那时它将大于20.但我得到的错误是" ORA-00933:SQL命令没有正确结束"我也得到了循环并以红色下划线标出。

我是否遗漏了一些简单的内容,或者我误解了如何使用循环?

2 个答案:

答案 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