1

我有两种类型:

   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() 函数吗?

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 回答