1

--私の最初の手順

CREATE OR REPLACE PROCEDURE P1(V_SALARY NUMBER,OUTPUT_VALUE OUT SYS_REFCURSOR)
AS
BEGIN
  OPEN OUTPUT_VALUE FOR 
  SELECT FIRST_NAME,LAST_NAME
    FROM EMPLOYEES
   WHERE SALARY >V_SALARY;
END;

--第二の手順

CREATE OR REPLACE PROCEDURE P2(V_SAL NUMBER)
AS
RETURN_VALUE SYS_REFCURSOR;
  TYPE TTT IS RECORD(FIRST_NAME VARCHAR2(30),LAST_NAME VARCHAR2(20)) ;
  I TTT;
  TYPE TNAME IS TABLE OF TTT INDEX BY BINARY_INTEGER;
  K TNAME;
BEGIN
  P1(V_SAL,RETURN_VALUE);
  FETCH RETURN_VALUE BULK COLLECT INTO K;
  FORALL X IN K.FIRST..K.LAST 
    INSERT INTO T1 VALUES (K(X).FIRST_NAME,K(X).LAST_NAME);
  CLOSE RETURN_VALUE;
END;
/

12 行目のエラー: PLS-00436: 実装制限: レコードの BULK In-BIND テーブルのフィールドを参照できません

しかし、for ループを挿入しようとすると、正常に動作します。Forall(一括バインド) を使用すると動作しません。

4

1 に答える 1