web-dev-qa-db-ja.com

テーブルに行があるかどうかを確認するにはどうすればよいですか?

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;

誰が私にこれの何が悪いのか教えてもらえますか?

これどうやってするの?

6
Anant Tyagi

構文が間違っています。ここでは許可されていません。この方法を試してください:

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;
6
Anton Chekmarev

匿名PL/SQLブロックはIFで始まりません。上記のコードは、少なくともbeginend;の間にある必要があります。

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バージョンの両方が最初に見つかった行で停止することに注意してください。これがポイントなので、テーブル/インデックス全体を読み取る必要はありません。

14
Balazs Papp