您可以使用sql表对象存储选择结果并重新使用它。这将消耗更多的内存,并且只有在第一个SELECT花费大量时间时才可能有效。
CREATE TYPE tab_number IS TABLE OF NUMBER;
/
您可以将其与BULK 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来存储中间结果集。