0
CREATE OR REPLACE  procedure abc
IS
TYPE abc is table of varchar2(200);
v_nt abc; 

BEGIN

select 'update emp_test set ename=''gaurav'' ' bulk collect into v_nt from emp;

forall i in v_nt.first..v_nt.last
execute immediate v_nt(i);

END; 
/

こんにちは、上記の手順を作成していますが、以下に示すようにコンパイル時エラーが発生します。

Compilation errors for PROCEDURE SCOTT.ABC

Error: PLS-00801: internal error [*** ASSERT at file pdw4.c, line 586; Unknown expression Expr = 283.; ABC__SCOTT__P__53497[11, 1]] Line: 11 Text: execute immediate v_nt(i);

このトランザクションを一括で行う必要があるため、どうすれば解決できますか。

4

1 に答える 1

1

以下は動作するはずです

CREATE OR REPLACE procedure abc IS
  TYPE abc is table of varchar2(200);
  v_nt abc;
BEGIN
  select 'gaurav' bulk collect into v_nt from emp;
  forall i in v_nt.first .. v_nt.last 
  execute immediate 'update emp_test set ename=:1' using v_nt(i);
END;
      /

以下でも同じ結果が得られますが

CREATE OR REPLACE procedure abc IS
 BEGIN
     execute immediate 'update emp_test set ename=''gaurav'' ';
 END;
       /
于 2012-04-13T11:13:44.810 に答える