您可以使用SQL表对象来存储select的结果并重用它。它将消耗更多的内存,并且只有在第一次选择花费大量时间时才可能有效。
CREATE TYPE tab_number IS TABLE OF NUMBER;
/
您可以将其与大容量collect into子句一起使用:
DECLARE
ids tab_number;
BEGIN
SELECT id BULK COLLECT INTO ids FROM table_with_ids;
SELECT * /*into ??*/
FROM table1
WHERE id IN (SELECT column_value FROM TABLE(ids));
SELECT * /*into ??*/
FROM table2
WHERE id IN (SELECT column_value FROM TABLE(ids));
END;
在版本9i和之前,您需要使用CAST查询表:
SELECT *
FROM table2
WHERE id IN (SELECT column_value FROM CAST (TABLE(ids) AS tab_number));
或者,您可以使用
GLOBAL TEMPORARY TABLE
存储中间结果集。