FORALL 子句中的赋值操作
assignment operation in FORALL clause
我正在尝试在一些变量计算之后使用带有 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;
谢谢,
不,因为 FORALL 语句可能只包含一个 DML 语句,而您有两个(如果您要求的话)。
forall
将集合绑定到单个 SQL 语句并一次性执行。这不是循环,也没有注入任何每行处理步骤的工具。
相反,您可以编写一个单独的步骤来遍历集合并在 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;
谢谢,
不,因为 FORALL 语句可能只包含一个 DML 语句,而您有两个(如果您要求的话)。
forall
将集合绑定到单个 SQL 语句并一次性执行。这不是循环,也没有注入任何每行处理步骤的工具。
相反,您可以编写一个单独的步骤来遍历集合并在 forall
之前修改每个值。