|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité de passage
![]() Inscription : novembre 2006 Messages : 13 ![]() |
Bonjour à tous,
Voila j'ai un petit problème avec un trigger : Ce trigger s'applique sur ma table emprunt composé des champs suivants : - NUM_ADHERENT : NUMBER - DATE_EMPRUNT : NUMBER - DATE_RETOUR : NUMBER Je souhaite que mon trigger teste avant d'insérer une nouvelle ligne dans la base si le num_adherent n'est pas déjà présent 5 fois (En gros on ne doit pas avoir plus de 5 emprunts dans la base pour un même num_adhérent). Voila mon trigger : Code :
Code :
|
||||
|
|
00
|
|
|
#2 | ||||
|
Invité de passage
![]() Inscription : novembre 2006 Messages : 13 ![]() |
Bonjour à tous,
Voila j'ai un petit problème avec un trigger : Ce trigger s'applique sur ma table emprunt composé des champs suivants : - NUM_ADHERENT : NUMBER - DATE_EMPRUNT : NUMBER - DATE_RETOUR : NUMBER Je souhaite que mon trigger teste avant d'insérer une nouvelle ligne dans la base si le num_adherent n'est pas déjà présent 5 fois (En gros on ne doit pas avoir plus de 5 emprunts dans la base pour un même num_adhérent). Voila mon trigger : Code :
Code :
|
||||
|
|
00
|
|
|
#3 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
déjà avec un COUNT tu peux pas avoir de NO_DATA_FOUND donc l'exception est inutile. En plus, sans show err pour voir l'erreur tu risques pas de t'en sortir
Sinon un INTO dans une sous-requête ça risque pas de marcher |
|
|
00
|
|
|
#4 | |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
Citation:
|
|
|
|
00
|
|
|
#5 | ||||
|
Invité de passage
![]() Inscription : novembre 2006 Messages : 13 ![]() |
Merci pour ton aide, j'ai essayé d'une façon différente :
Code :
Code :
|
||||
|
|
00
|
|
|
#6 |
|
Membre émérite
![]() ![]() Inscription : décembre 2003 Messages : 994 ![]() |
il ne manque pas un IF ?
|
|
|
00
|
|
|
#7 | ||
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 320 ![]() |
Comme d'habitude on commence par les triggers en ignorant le SQL
Code :
|
||
|
|
00
|
|
|
#8 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 459 ![]() |
pas mal !
![]() Bon, après y'aura forcement l'erreur MUTATING TABLE. Et là, ça va être dur de contourner.
__________________
More Code : More Bugs. Less Code : Less Bugs |
|
|
00
|
|
|
#9 | |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
merci d'éviter de créer 2 discussions sur le même sujet surtout pour un problème de syntaxe qu'une simple relecture du code et une bonne compréhension de l'erreur pourrait résoudre
Citation:
|
|
|
|
00
|
|
|
#10 |
|
Invité de passage
![]() Inscription : novembre 2006 Messages : 13 ![]() |
Merci à tous pour votre aide !
|
|
|
00
|
|
|
#11 | ||
|
Invité de passage
![]() Inscription : novembre 2006 Messages : 13 ![]() |
Pour ceux que ça interesse je poste la solution :
Code :
|
||
|
|
00
|
|
|
#12 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 459 ![]() |
Et si 2 adhérents ont plus de 5 lignes, tu sortiras en TOO_MANY_ROWS
__________________
More Code : More Bugs. Less Code : Less Bugs |
|
|
00
|
|
|
#13 |
|
Expert Confirmé
![]() dba Inscription : juillet 2007 Messages : 2 523 ![]() |
Code :
raise_application_error(-20902,'L''adhérent a déjà 5 emprunts en cours.'); Et une clause WHERE serait sûrement avantageux dans ta requète comme précisé ci-dessus. |
|
|
00
|
|
|
#14 |
|
Membre Expert
![]() |
et puis la gestion d'exceptions est inutile puisque dans un cas (when no data found) alors null mais dans les autres le fait que tu ne spécifies rien impliques null aussi ... il te manque in when others then raise ou quelque chose du genre.
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com