0

PL/SQL は初めてで、次のような一括収集の結果を使用できるかどうか疑問に思っていました。

Declare
type result_bulk_type is Table of table1.ID%type;
result_bulk result_bulk_type;
BEGIN
SELECT id BULK COLLECT INTO result_bulk FROM table1;
UPDATE table2 SET status=1 WHERE id IN result_bulk;
END;

コンパイル時にエラーが発生しました:

PL/SQL: SQL文は無視されました

PL/SQL: ORA-00932: 一貫性のないデータ型: 予想される NUMBER が SYS_PLSQL_22223_23_1 を取得しました

ご協力いただきありがとうございます!

4

2 に答える 2

2

いいえ、この方法ではできません。代わりに FORALL ステートメントを使用してください。
これを読んでください: http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/forall_statement.htm#LNPLS01321

例:

Declare
  type result_bulk_type is Table of table1.ID%type;
  result_bulk result_bulk_type;
BEGIN
  SELECT id BULK COLLECT INTO result_bulk FROM table1;
  FORALL i IN INDICES OF result_bulk
    UPDATE table2 SET status=1 WHERE id = result_bulk( i );
END;
/

デモ: http://sqlfiddle.com/#!4/b3a72/1

于 2014-02-13T13:59:25.023 に答える