我正在编写一个需要返回文档ID的存储过程 这个文件的id可以是两个字段中的任何一个。 APP_DOC_ID(从应用程序添加)BTCH_DOC_D(从批处理添加)都是同一个表中的不同字段。
我需要根据子查询获得那些docid。
SELECT DISTINCT APP_DOC_ID FROM
(SELECT APP_DOC_ID FROM XXXXXX BC WHERE BC.XX||BC.XY||BC.XZ IN
(SUBQUERY))
UNION ALL
SELECT DISTINCT BTCH_DOC_ID FROM
(SELECT BTCH_DOC_ID FROM XXXXXX BC WHERE BC.XX||BC.XY||BC.XZ IN
(SUBQUERY))
我的SUBQUERY有点复杂,所以我不想运行该查询2次1 APP_DOC_ID和BTCH_DOC_ID, 是否可以将子查询结果保存在RECORD或CURSOR中,并将其用于查询的
像
BEGIN
OPEN P_CURSOR FOR (Select AB.XX||AB.XY||AB.XZ from ....)
SELECT DISTINCT APP_DOC_ID FROM
(SELECT APP_DOC_ID FROM XXXXXX BC WHERE BC.XX||BC.XY||BC.XZ IN P_CURSOR)
UNION ALL
SELECT DISTINCT BTCH_DOC_ID FROM
(SELECT BTCH_DOC_ID FROM XXXXXX BC WHERE BC.XX||BC.XY||BC.XZ IN P_CURSOR)
这种方法我没有运行我的复杂子查询2次。
感谢您的帮助和时间
答案 0 :(得分:1)
您可以使用WITH
子句:
WITH subquery AS(
SELECT .... your complex subquery goes here
)
SELECT DISTINCT APP_DOC_ID FROM
(SELECT APP_DOC_ID FROM XXXXXX BC WHERE BC.XX||BC.XY||BC.XZ IN
(SELECT * FROM SUBQUERY))
UNION ALL
SELECT DISTINCT BTCH_DOC_ID FROM
(SELECT BTCH_DOC_ID FROM XXXXXX BC WHERE BC.XX||BC.XY||BC.XZ IN
(SELECT * FROM SUBQUERY SUBQUERY))
有关详细信息,请参阅此链接:subquery factoring clause
WITH query_name子句允许您为子查询块指定名称。 然后,您可以在查询中引用子查询块多个位置 通过指定query_name。 Oracle数据库通过优化查询 将查询名称视为内联视图或临时视图 表