-2

PL/SQL 匿名ブロックを作成する必要があります。このブロックは、からデータをコピーし、複製t_srct_destれた値を table に格納する必要がありますt_err

t_srcデータで満たされた 2 つの列があり、主キーはありません。
t_destは空で、列 1 は主キーです。重複の例外がある場合は、それを渡して重複レコードを に保存する必要がありt_errます。カーソル、forall、およびBULK COLLECT. これまでに、次のブロックを作成しました。

    DECLARE 
    CURSOR c_copy IS
    select column1, column2
    from t_src;
    TYPE curtype IS TABLE of c_copy%ROWTYPE;
    cursor1 curtype;
 BEGIN 
   OPEN c_copy;
   LOOP 
     FETCH c_copy BULK COLLECT INTO cursor1;
     FORALL c_count IN 1..cursor1.COUNT SAVE EXCEPTIONS
     INSERT INTO t_dest          
                VALUES curtype(c_count)              
    EXCEPTION
    WHEN DUP_VAL_ON_INDEX THEN
    INSERT INTO t_err VALUES curtype(c_count);    
  EXIT WHEN c_copy%NOTFOUND
  END LOOP;
 CLOSE c_copy;
 END
4

1 に答える 1

0

TYPE curtype は c_copy%ROWTYPE の TABLE です。
上記の行が問題を引き起こしています。

column1、column2 などのフィールドごとにテーブル型変数を作成する必要があります。

TYPE tab_column1 は t_src.COLUMN1%TYPE のテーブルです。TYPE tab_column2 は t_src.column2%type のテーブルです。

L_column1 tab_column1; L_column2 tab_column2;

次に使用します

FeTCH c_copy BULK COLLECT INTO L_column1, L_column2;

以前に同様の問題に直面したことがあり、これが修正に使用した回避策でした。

于 2015-09-19T13:30:26.520 に答える