FORALL 子句中的赋值操作

Posted

技术标签:

【中文标题】FORALL 子句中的赋值操作【英文标题】:assignment operation in FORALL clause 【发布时间】:2018-01-26 12:44:04 【问题描述】:

我正在尝试在一些变量计算之后使用带有 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;

谢谢,

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

forall 将集合绑定到单个 SQL 语句并执行它,这一切都在一个镜头中完成。这不是一个循环,也没有任何设施可以注入任何每行处理步骤。

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

【讨论】:

以上是关于FORALL 子句中的赋值操作的主要内容,如果未能解决你的问题,请参考以下文章

20190528-JavaScriptの打怪升级旅行 { 语句 [ 赋值 ,数据 ] }

关于合取范式中的公式,下列哪项是正确的?

PDDL forall 与持续动作中的 when 条件

python中列表中的方法(重点) 列表的基本操作(赋值删除和分片赋值)

使用 FORALL 和 RETURNING 插入表时如何获取 ROWID

成员初始化器列表中的赋值操作