【发布时间】:2016-06-22 19:04:22
【问题描述】:
我正在尝试在 PL-SQL 块中使用“WITH”子句:
使用 WITH 子句的游标如下:
CURSOR c_API_MSG
IS
WITH SAMI AS (SELECT * FROM NAGENDRA WHERE STATUS = 'NEW')
SELECT * FROM SAMI WHERE ROWNUM <= TO_NUMBER (10);
执行:
FOR v_Rec IN c_API_MSG
LOOP
BEGIN
-- My LOGIC
END;
END LOOP;
它没有正确执行。它不会进入循环内部。似乎游标无法获取行,这就是退出的原因。
没有 with 子句的正常子查询工作正常。 With 子句在编辑器上运行良好。
使用 'WITH' 子句是否有任何限制,或者我在这里遗漏了什么?
观察:
在 toad 编辑器中带有以下查询:
如果我使用 f9(正常执行):找到 5 行(正确结果)
如果我使用 f5 :找不到行(这是我担心的)
WITH SAMI AS (SELECT * FROM NAGENDRA WHERE STATUS = 'NEW')
SELECT * FROM SAMI WHERE ROWNUM <= TO_NUMBER (10);
【问题讨论】:
-
您是否已提交对 NAGENDRA 表所做的所有更改?
-
顺便说一句:
TO_NUMBER (10)...您正在将数字转换为数字?何必?只需改用10。 -
请显示您正在运行的完整和真实代码。有 > 99% 的概率,你的逻辑有缺陷。将其剥离为minimal reproducible example,并提供表格定义和内容(如果您无法发布真实数据,可能会提供虚拟数据)。
-
另外,根据 TOAD 文档,F9 运行单个语句,而 F5 运行所有语句。我的猜测是您执行了多个语句,最后一个语句不返回任何数据。但同样:除非您提供更多信息,否则无法为您提供帮助。
-
感谢大家的回复。 @MarcinWroblewski:是的,已提交更改。