如何解决在Oracle的过程中重用选择查询
您可以使用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来存储中间结果集。
解决方法
我将如何存储select语句的结果,以便可以将结果与in
子句重用于其他查询?这是一些伪代码:
declare
ids <type?>;
begin
ids := select id from table_with_ids;
select * from table1 where id in (ids);
select * from table2 where id in (ids);
end;
…或者如果我只是将子查询放在两个select语句中,优化器是否会为我执行此操作?
编辑:这是有关我的表结构的更多信息。
基本上,table1是一个标准表,其id是主键。而table2具有3列主键,其中id是这些列之一。在我的情况下,table2中的ID将显示在三行中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。