[PL/SQL] Exception NO_DATA_FOUND
B@|-|@N
Messages postés
386
Statut
Membre
-
yannsar -
yannsar -
Bonjour à toutes et à tous.
Débutant en PL/SQL avec une doc assez mince et n'ayant pas d'accès au web si ce n'est limité (très limité), je voudrais vous poser une question.
Voilà à quoi ressemble mon code, pour l'instant :
Mon problème vient de l'exception NO_DATA_FOUND. Bon, l'explication du code est la suivante :
- La requête qui impacte table1 va avoir ou non un enregistrement parmi plusieurs répondant à la clause champ1='toto'.
- Le résultat de cette requête est envoyée dans la variable var1.
- L'exception NO_DATA_FOUND va traiter en fait le cas où il n'y aurait pas d'enregistrement répondant à la clause champ1='toto'.
Le truc, c'est que je ne sais pas si l'exception NO_DATA_FOUND va se lever si dans ma deuxième requête, il n'y a pas d'enregistrement ?
En gros, si on définit plusieurs requêtes dans le DECLARE et qu'on lève l'exception NO_DATA_FOUND. Est-ce qu'on va "aller" dans cette exception si n'importe quelle requête ne ramène pas d'enregistrement, ou alors est-ce que je peux clairement affecter cette exception NO_DATA_FOUND à une requête particulière ?
Bahan, compliquééééé X_X
Débutant en PL/SQL avec une doc assez mince et n'ayant pas d'accès au web si ce n'est limité (très limité), je voudrais vous poser une question.
Voilà à quoi ressemble mon code, pour l'instant :
DECLARE var1 NUMBER; SELECT 1 INTO var1 FROM table1 WHERE champ1='toto'; var2 table2.champ2%TYPE; SELECT champ2 INTO var2 FROM table2; BEGIN IF var1 =1 THEN UPDATE table3 blablabla; COMMIT; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO table3 blablabla2 COMMIT; END;
Mon problème vient de l'exception NO_DATA_FOUND. Bon, l'explication du code est la suivante :
- La requête qui impacte table1 va avoir ou non un enregistrement parmi plusieurs répondant à la clause champ1='toto'.
- Le résultat de cette requête est envoyée dans la variable var1.
- L'exception NO_DATA_FOUND va traiter en fait le cas où il n'y aurait pas d'enregistrement répondant à la clause champ1='toto'.
Le truc, c'est que je ne sais pas si l'exception NO_DATA_FOUND va se lever si dans ma deuxième requête, il n'y a pas d'enregistrement ?
En gros, si on définit plusieurs requêtes dans le DECLARE et qu'on lève l'exception NO_DATA_FOUND. Est-ce qu'on va "aller" dans cette exception si n'importe quelle requête ne ramène pas d'enregistrement, ou alors est-ce que je peux clairement affecter cette exception NO_DATA_FOUND à une requête particulière ?
Bahan, compliquééééé X_X
A voir également:
- [PL/SQL] Exception NO_DATA_FOUND
- Logiciel sql - Télécharger - Bases de données
- Appliquez à tous les paragraphes du document à télécharger, à l’exception des titres et des sous-titres, la mise en forme suivante : - Guide
- Une exception non gérée s'est produite dans votre application - Forum Word
- Sql (+) - Forum Programmation
- Erreur d'application : une exception côté client s'est produite (consultez la console du navigateur pour plus d'informations). - Windows 11
3 réponses
logiquement, tu créées un curseur dans ton declare :
cursor toto is
select tata from table1;
cursor titi is
select tutu from table2;
puis dans ton begin, tu ouvres ton 1er curseur par exemple
open toto;
loop
fetch toto into var_toto;
exit when toto%notfound;
close toto;
voilou
cursor toto is
select tata from table1;
cursor titi is
select tutu from table2;
puis dans ton begin, tu ouvres ton 1er curseur par exemple
open toto;
loop
fetch toto into var_toto;
exit when toto%notfound;
close toto;
voilou
Et ça ne va pas provoquer une exception ?
Parce que dans ma requête 1, je ne ramène en fait qu'un seul enregistrement, donc c'est plus ou moins y a un enregistrement ou y en n'a pas.
L'attribut %NOTFOUND couvre ce genre de situation ?
Bahan
Parce que dans ma requête 1, je ne ramène en fait qu'un seul enregistrement, donc c'est plus ou moins y a un enregistrement ou y en n'a pas.
L'attribut %NOTFOUND couvre ce genre de situation ?
Bahan
Pour que ton exception marche, il faut que ta requete soit à l'interieur de ton begin (si mes souvenirs sont bons).
le probleme c'est que tu ne peux faire un select a l'interieur de ton begin qu'en passant par un curseur.
Mais pour repondre à ta question, l'attribut notfound repond bien à cette situation
le probleme c'est que tu ne peux faire un select a l'interieur de ton begin qu'en passant par un curseur.
Mais pour repondre à ta question, l'attribut notfound repond bien à cette situation