我有两种类型:
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()函数?
答案 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;