奇妙なことが見つかりました。。サブクエリでFORが動作する仕組みを理解できないSELECT INTO
declare cnt number;
begin
for r in (Select count(1) into cnt from v$session) loop
dbms_output.put_line(cnt);
END LOOP;
end;
Select count(1) from v$session
リターンnullでない値私は理解しました。もちろん、
:
- Oracleはこのクエリを許可し、それは実行だ後、なぜ
cnt
変数が変更されない理由を理解することはできませんこの場合、FOR
は必要ありません。Count
なしINTO
は1行だけを返します。 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値を返さない理由は?
私の答えを見てください。 select文の中でカラムに名前を付ける必要があります。テーブル行のように 'r'を処理します。 –