FORALL子句中的赋值操作

时间:2018-01-26 12:44:05

标签: oracle plsql forall

我试图在一些变量计算后使用带有FORALL子句的INSERT语句。

更确切地说:

declare
    type t_test_bis is table of test_1%rowtype;
    v_test_bis t_test_bis;

    cursor c_1 is
        select * from test_1;
    i number;
begin

    OPEN c_1;
    LOOP
        FETCH c_1 BULK COLLECT INTO v_test_bis;     
        EXIT WHEN c_1%NOTFOUND;
    END LOOP;
    CLOSE c_1;

    forall j in 1 .. v_test_bis.count
        v_test_bis(i).age := v_test_bis(i).age + 10;  -- is there a way to perform such opperation?
        insert into test_2 values v_test_bis(i);

end;

谢谢,

2 个答案:

答案 0 :(得分:2)

forall将一个集合绑定到一个SQL语句并一次性执行它。它不是一个循环,并且没有任何设施可以注入任何每行处理步骤。

相反,您可以编写单独的步骤来循环遍历集合并修改forall之前的每个值。

答案 1 :(得分:1)

不,因为FORALL语句可能只包含一个DML语句,而你有两个(如果这就是你要求的话)。