sql – Oracle.无法理解FOR如何使用子查询SELECT INTO
发布时间:2020-12-12 07:28:04 所属栏目:MsSql教程 来源:网络整理
导读:发现奇怪的事情.无法理解为什么Oracle允许此查询以及为什么cnt变量在执行后不会更改: declare cnt number;begin for r in (Select count(1) into cnt from v$session) loop dbms_output.put_line(cnt); END LOOP; end; 从v $session中选择count(1)返回not nu
发现奇怪的事情.无法理解为什么Oracle允许此查询以及为什么cnt变量在执行后不会更改:
declare cnt number; begin for r in (Select count(1) into cnt from v$session) loop dbms_output.put_line(cnt); END LOOP; end; 从v $session中选择count(1)返回not null值 我当然明白了: >在这种情况下,FOR不需要.没有INTO的计数只返回一行. 只是好奇它如何以及为什么它在上面的查询中工作. 奇怪为什么Oracle允许使用SELECT INTO子查询,因为在常见情况下Oracle返回编译错误ORA-06550 declare cnt number; begin select count(1) from (Select count(1) into cnt from v$session) end; or 如果第一个查询有效 – 为什么它不能正确返回cnt值? 解决方法非常有趣,我会说这是一个错误,除了它是一个良性的. INTO cnt位是有效的PL / SQL,但在此上下文中被忽略,可以通过简单的测试用例证明:declare cnt number; begin for r in (select count(1) into cnt from dual) loop dbms_output.put_line('cnt=' || cnt); dbms_output.put_line('r=' || r."COUNT(1)"); end loop; end; 如您所见,INTO子句被忽略,正如预期的那样,r记录被正确填充.我11gR2实例的输出: cnt= r=1 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |