【发布时间】:2011-11-18 15:26:41
【问题描述】:
我需要从几个不同的表中收集大量 id 到某种变量中,然后传递给另一个函数。从哪些表中获取 id 是动态的,具体取决于下面的参数 iVar。问题是是否没有更好的方法来做到这一点,因为这种方法必须多次复制和重新分配数组。将它全部插入临时表会更好吗?使用动态sql会更好。请参阅下面的 get_ids 函数:
FUNCTION concat (
iList1 IN ID_ARRAY,
iList2 IN ID_ARRAY
)
RETURN ID_ARRAY IS
lConcat ID_ARRAY;
BEGIN
SELECT column_value BULK COLLECT INTO lConcat FROM (
(SELECT column_value FROM TABLE(CAST( iList1 AS ID_ARRAY)))
UNION ALL
(SELECT column_value FROM TABLE(CAST( iList2 AS ID_ARRAY)))
);
RETURN lConcat;
END concat;
FUNCTION get_ids (
iVar IN NUMBER
)
RETURN ID_ID_ARRAY IS
lIds ID_ARRAY;
BEGIN
lids := get_ids0();
IF iVar = 1 THEN
lIds := concat(lFilter, get_ids1());
ELSE
lIds := concat(lFilter, get_ids3());
IF iVar = 4 THEN
lIds := concat(lFilter, get_ids4());
END IF;
END IF;
RETURN lIds;
END get_ids;
【问题讨论】:
标签: sql oracle plsql user-defined-types