gpt4 book ai didi

sql - 在查询 Oracle 12.1 中使用 WITH 子句中的 CURSOR 表达式

转载 作者:行者123 更新时间:2023-12-04 10:13:13 24 4
gpt4 key购买 nike

我有一个奇怪的问题,光标中显示的数据是 不正确 .下面是表和查询。但是当我更换 CURSOR (Select * from H) 时使用 CURSOR(H 的实际查询),它可以工作

   Tab1              Tab2
Col1 Col2 Col3 Col4
---------- ----------
1 A 1 A
2 B 2 B
3 C 6 F
4 D 7 G
5 E 8 H

WITH H AS (SELECT * FROM tab1
WHERE NOT EXISTS (SELECT 1 FROM tab2 WHERE col1 = col3)
)
K AS (SELECT count(*) cnt FROM H)
SELECT cnt, CURSOR(SELECT * FROM H) result FROM K;

上述查询的输出给出 Cnt = 3 并且光标具有如下数据,这是不正确的。但是当你只运行 Select * from H 时,你会得到正确的输出,即 3, 4, 5 行
Col1  col2
--- ---
1 A
2 B

最佳答案

按此 article子查询重构要么使用全局临时表,要么使用内联 View 。

在您的情况下,它可能正在使用全局临时表,我猜 CURSOR 关键字对全局临时表做了一些隐含的操作。

尝试使用 INLINE 提示,看看它是否有效

WITH  H AS (SELECT  /*+ INLINE */ a.* FROM tab1 a
WHERE NOT EXISTS (SELECT 1 FROM tab2 WHERE col1 = col3)
)

关于sql - 在查询 Oracle 12.1 中使用 WITH 子句中的 CURSOR 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61211797/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com