PL/SQLは完全に初めてです。次のPL/SQLスクリプトを記述しました。しかし、実行されず、コンパイルエラーが発生します。
set serveroutput on SIZE 1000000;
IF EXISTS (select * from my_table)
begin
dbms_output.put_line('has rows');
end;
else
begin
dbms_output.put_line('no rows');
end;
誰が私にこれの何が悪いのか教えてもらえますか?
これどうやってするの?
構文が間違っています。ここでは許可されていません。この方法を試してください:
declare
cnt number;
begin
select count(*) into cnt from my_table;
if cnt != 0 then
dbms_output.put_line('has rows');
else
dbms_output.put_line('no rows');
end if;
end;
匿名PL/SQLブロックはIF
で始まりません。上記のコードは、少なくともbegin
とend;
の間にある必要があります。
EXISTS
はSQL関数であり、そのようなPL/SQLでは使用できません。
次のようなものを試してください:
set serveroutput on
declare
c number;
begin
select count(*) into c from my_table where rownum = 1;
if c != 0 then
dbms_output.put_line('has rows');
else
dbms_output.put_line('no rows');
end if;
end;
/
はい、クエリでEXISTS
を使用することもできます。
set serveroutput on
declare
c varchar2(10);
begin
select case when exists (select * from my_table) then 'has rows' else 'no rows' end into c from dual;
dbms_output.put_line(c);
end;
/
EXISTS
バージョンとrownum = 1
バージョンの両方が最初に見つかった行で停止することに注意してください。これがポイントなので、テーブル/インデックス全体を読み取る必要はありません。