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?
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;
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.