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)
Oracle 10g中存在限制 - 您无法在FORALL语句中访问单个记录字段.如果您使用的是Oracle 11g,则可以执行此操作.
但是,有一些解决方法,我推荐以下文章提出其中一些:10g中的PLS-00436 - 解决方法.