2

テーブル型の入力パラメータを取るプロシージャがあります。ここで、このパラメーターを SELECT クエリの IN 句で使用する必要があります。

CREATE TYPE ids IS TABLE OF NUMBER;

CREATE PROCEDURE (emp_ids IN ids) IS

CURSOR IS (SELECT * FROM EMPLOYEES WHERE EMP_ID IN (SELECT * FROM TABLE(emp_ids)); .....

しかし、SQL ステートメントではローカル コレクション型を使用できないため、このコードは機能しないことがわかりました。

SELECT ステートメントでテーブル型パラメーターを使用する別の方法はありますか?

4

1 に答える 1

2

投稿した内容によると、コレクションをローカルタイプではなくスキーマオブジェクトとして宣言しています。これは、使用に問題がないことを意味します。次に例を示します。

-- collection type as schema object
SQL> create or replace type ids is table of number;
  2  /

Type created

SQL> create or replace procedure proc1 (emp_ids IN ids)
  2  IS
  3     cursor c is (
  4       select first_name
  5         from employees
  6        where employee_id in (select column_value
  7                                from table(emp_ids)
  8                              )
  9     );
 10  begin
 11    for i in c
 12    loop
 13       dbms_output.put_line(i.first_name);
 14    end loop;
 15  end;
 16  /

Procedure created

SQL> exec proc1(ids(101, 103, 200));

Neena
Alexander
Jennifer

PL/SQL procedure successfully completed
于 2012-12-16T15:19:06.973 に答える