使用Oracle中的select子句传递表参数

时间:2012-06-12 15:23:52

标签: sql oracle plsql

我有两种类型:

   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 var,填充它然后传递给A()函数?

1 个答案:

答案 0 :(得分: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;