Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Usenet -> c.d.o.server -> Re: PL/SQL : function or pseudo-column 'EXISTS' may be used inside a SQL.........

Re: PL/SQL : function or pseudo-column 'EXISTS' may be used inside a SQL.........

From: Syltrem <syltremzulu_at_videotron.ca>
Date: Tue, 17 Aug 2004 09:08:15 -0400
Message-ID: <W3oUc.1365$KF.10726@tor-nn1.netcom.ca>


"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---


> 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.
Received on Tue Aug 17 2004 - 08:08:15 CDT

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US