小编Vik*_*kov的帖子

甲骨文.无法理解FOR如何使用子查询SELECT INTO

发现奇怪的事情.无法理解为什么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;
Run Code Online (Sandbox Code Playgroud)

Select count(1) from v$session 返回非空值

我当然明白了:

  1. FOR并不需要在这种情况下.Count没有INTO返回只有一行.
  2. 我可以在没有它的情况下使用它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 
Run Code Online (Sandbox Code Playgroud)

如果第一个查询有效 - 为什么它不能正确返回cnt值?

sql oracle plsql

7
推荐指数
1
解决办法
147
查看次数

标签 统计

oracle ×1

plsql ×1

sql ×1