Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Usenet -> c.d.o.server -> Re: PL/SQL : function or pseudo-column 'EXISTS' may be used inside a SQL.........
"naud" <naudjf_at_yahoo.fr> a écrit dans le message de
news:1e1a7efc.0408170027.29acc6ac_at_posting.google.com...
> bonjour,
>
> je souhaite faire une alternative en utilisant la condition NOT
> EXISTS(). Voici le bout de code :
> BEGIN
> IF NOT EXISTS (select 1 from ordres)
> THEN select 'dfdqsfdsf' from ordres;
> end if;
> END;
>
> Le problème c'est que, à l'exécution, j'ai un message d'erreur me
> disant :
> "ORA-06550: line 2, column 12:
> PLS-00204: function or pseudo-column 'EXISTS' may be used inside a SQL
> statement only".
>
C'est exactement comme le message d'erreur l'indique:
Ce n'est pas valide en PL/SQL, c'est valide dans une requête SQL.
SELECT MATABLE.COLONNE1 from MATABLE where exists (SELECT 1 from LAUTRETABLE
where LAUTRETABLE.COLONNE2=MATABLE.COLONNE1);
Affichera MATABLE.COLONNE1 seulement si
LAUTRETABLE.COLONNE2=MATABLE.COLONNE1 existe.
C'est comme faire
SELECT MATABLE.COLONNE1 from MATABLE, LAUTRETABLE where
LAUTRETABLE.COLONNE2=MATABLE.COLONNE1;
Il y a des cas où l'utilisation de EXISTS fait plus de sens et accélère le
traitement.
Pour ce que tu veux faire, tu peux utiliser un curseur ou bien vérifier la condition NO_DATA_FOUND dans une routine EXCEPTION. Voit la docum sur le sujet trapping exceptions.
Exemple de curseur:
(faut d'abord définir le curseur C1)
LOOP
FETCH c1 INTO my_ename, my_sal, my_hiredate;
IF c1%FOUND THEN -- fetch succeeded
...
ELSE -- fetch failed, so exit loop
EXIT;
END IF;
END LOOP;
-- Syltrem OpenVMS 7.3-1 + Oracle 8.1.7.4 http://pages.infinit.net/syltrem (OpenVMS related web site, en français) ---zulu is not in my email address---Received on Tue Aug 17 2004 - 08:08:15 CDT
> Pourtant, cette condition focntionne très bien dans le WHERE d'un
> SELECT.
> Et j'ai trouvé dans différentes docs PL/SQL que la forme IF NOT
> EXISTS(...) THEN...; ELSE...;
> était correcte.
>
> Qqn a une idée ?
>
> Merci.
![]() |
![]() |