1

私には2つのタイプがあります:

   CREATE OR REPLACE TYPE id_type AS OBJECT
   (
     id NUMBER(19, 0)
   );

   CREATE OR REPLACE TYPE id_table AS TABLE OF id_type;

そして、関数 A(param IN id_table) があります。

さて、最初の関数を使用する別の関数がある場合、A(SELECT 1 FROM DUAL) のようなパラメーターを渡すにはどうすればよいでしょうか? id_table 変数を手動で作成し、それを埋めてから A() 関数に渡すことしかできませんか?

4

1 に答える 1

1

次のようなことができます

DECLARE
  l_ids     id_table;
  l_return  <<data type>>;
BEGIN
  SELECT id_type( 1 )
    BULK COLLECT INTO l_ids
    FROM dual;
  l_return := a( l_ids );
END;

ただし、この場合に がある理由は明らかではありませんid_type。単純に宣言する方が論理的に思えるでしょうid_table

CREATE OR REPLACE TYPE id_table
    AS TABLE OF NUMBER(19,0);

また、デュアルから選択してコレクションを作成する意図があるかどうかも明らかではありません。単一要素のコレクションが本当に必要な場合は、単純に初期化できます。ただし、テーブルをクエリすることによってコレクションにデータを入力するつもりであると推測していますが、そのDUAL場合は、BULK COLLECT

DECLARE
  l_ids     id_table := new id_table( id_type( 1 ) );
  l_return  <<data type>>;
BEGIN
  l_return := a( l_ids );
END;
于 2012-06-12T15:28:07.443 に答える