web-dev-qa-db-fra.com

Comment vérifier si le tableau a des lignes?

Je suis complètement nouveau sur PL/SQL. J'ai écrit le script PL/SQL suivant. Mais il ne s'exécute pas et donne une erreur de compilation:

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;

Quelqu'un peut-il me dire ce qui ne va pas?

Comment puis-je faire ceci?

6
Anant Tyagi

Mauvaise syntaxe If. Et n'existe pas autorisé ici. Essayez de cette façon:

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

Les blocs PL/SQL anonymes ne commencent pas par IF. Le code ci-dessus doit être compris entre begin et end; au moins.

EXISTS est une fonction SQL, elle ne peut pas être utilisée en PL/SQL comme ça.

Essayez quelque chose comme ceci:

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;
/

Oui, l'utilisation de EXISTS dans la requête est également possible:

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;
/

Notez que EXISTS et rownum = 1 la version s'arrêtera sur la première ligne trouvée, et c'est le point, donc nous n'avons pas besoin de lire la table/l'index entier.

14
Balazs Papp