将语句数组合并为源表

Jåc*_*cob 4 sql oracle merge plsql oracle10g

是否可以使用数组作为merge语句的源

例如,我有下面的合并声明,当我编译时,我收到错误.如何使用与数组合并作为源表?

PLS-00436: implementation restriction: cannot reference fields of BULK In-BIND 
table of records 
Run Code Online (Sandbox Code Playgroud)

程序代码

CREATE or REPLACE PROCEDURE my_proc (varray IN my_array)
     AS
     BEGIN
          FORALL i IN varray.first..varray.last
          MERGE INTO tab t
          USING dual
          ON ( t.proj_id = varray(i).proj_id)
          WHEN MATCHED THEN
          UPDATE  set
          proj_title = varray (i).proj_title
                      WHERE   proj_id = varray (i).proj_id
            WHEN NOT MATCHED THEN
            insert (proj_id,proj_title)
            values (varray (i).proj_id,varray (i).proj_title);
         values (varray (i).proj_id,varray (i).proj_title);
Run Code Online (Sandbox Code Playgroud)

Prz*_*lej 5

Oracle 10g中存在限制 - 您无法在FORALL语句中访问单个记录字段.如果您使用的是Oracle 11g,则可以执行此操作.

但是,有一些解决方法,我推荐以下文章提出其中一些:10g中的PLS-00436 - 解决方法.