|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : décembre 2007 Messages : 13 ![]() |
Salut comme vous pouvez vous en douter j'ai un problème avec un trigger un peu réticent.
En fait quand je fait mon CREATE TRIGGER ... dans Oracle je tape entrée pour qu'Oracle me le crée mais la il ne fait rien ... ouais rien du tout même pas de message d'erreur rien. Alors bon je me permet de vous poster le code en espérant que quelqu'un trouve mon erreur surement aussi grosse qu'un éléphant dans un couloir mais bon je vois pas. Code :
|
||
|
|
00
|
|
|
#2 |
|
Membre éprouvé
![]() Inscription : décembre 2007 Messages : 354 ![]() |
Quel outil utilisez-vous?
Dans SQL*Plus il faut suivre le code par / au début de la ligne mais vous ne serez pas à la fin de vos soucis ... |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : décembre 2007 Messages : 13 ![]() |
Justement j'utilise SQL*Plus et je viens d'ajouter le / à la fin du code et en effet ca marche beaucoup mieux.
Enfin j'ai une erreur dés la première ligne mais bon c'est déjà mieux que rien du tout. Merci pour l'information je me doutait bien que je devais oublier quelques chose d'idiot. Cependant j'ai maintenant un erreur : ERREUR à la ligne 1 : ORA-04082: références NEW ou OLD interdites dans déclencheurs niveau table Je vais essayer de comprendre ce que ca veut dire mais je ne vois pas vraiment le problème. Est ce que par hazard mon trigger est si mal foutu que ca ou bien y a encore une chance de le sauver ? |
|
|
00
|
|
|
#4 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
je pense que ce serait mieux de nous expliquer ce que tu veux faire parce que le trigger me semble faire n'importe quoi
notamment t'as pas le droit de mettre à jour la table qui porte le trigger (INSERT dans un trigger INSERT tu penses pas que ça peut poser problème ?) |
|
|
00
|
|
|
#5 |
|
Membre éprouvé
![]() Inscription : décembre 2007 Messages : 354 ![]() |
C'est bien ce que j'ai dit vu le code du trigger. Il y a effectivement plein de problèmes qui vous attendent. et la je répète la question de Orafrance : Que voulez-vous faire?
|
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Inscription : décembre 2007 Messages : 13 ![]() |
Oui tu as raison mon trigger fait vraiment n'importe quoi
J'ai ajouté l'option FOR EACH ROW pour palier l'erreur : ORA-04082: références NEW ou OLD interdites dans déclencheurs niveau table mais ca fait des erreur de compile : Avertissement : Déclencheur créé avec erreurs de compilation. Alors pour l'explication ca va pas être simple mais je vais essayer d'être clair. J'essaye de faire un base de données qui pourrai gerer un site de vente aux enchère style eBay. J'ai une table Enchere : Enchère (NumID(Utilisateur), NumIDAnnonce(Annonce), MontantMax, DateEnchere, EnchereAuto) Et en fait j'ai deux types d'enchères, automatique ou normal défini par mon attribut EnchereAuto (0 pour normal et 1 pour automatique). Les enchère normal c'est un utilisateur qui pour une annonce encherie à hauteur d'un montant (MontantMax) à une date (DateEnchere). Les enchères automatiques c'est une enchère qui va avoir un MontantMax cependant elle va générer des tuples enchères normal avec pour valeur de MontantMax : la plus grosse enchère actuel sur l'annonce + 10% tant que se total est inferieur à montantmax. L'idée du trigger maintenant : Aprés insertion dans ma table enchère d'un nouveaux tuple T Boucle 1 Pour chaque enchere automatique EA Si EA.NumIDAnnonce=T.NumIDAnnonce ET si EA.MontantMax est superieur à tout les autres montant des enchere sur l'annonce ET si ce n'est pas EA.NumID (l'utilisateur qui à posé l'enchère automatique) qui est le plus gros encherisseur ALORS On ajoute un nouveaux tuple dans la table enchère qui correspond à une enchère normal (de l'utilisateur qui à posé l'enchère automatique) avec un montant égal à la plus grosse enchère + 10% Boucle1 FIN |
|
|
00
|
|
|
#7 |
|
Membre éprouvé
![]() Inscription : décembre 2007 Messages : 354 ![]() |
Et si deux utilisateurs ont positionné chacun une enchère automatique sur la même annonce que feras-tu? Ce cas doit être traité ...
Indépendamment, tu feras mieux d'avoir une table à part pour les enchères automatiques mais ce ne sera pas la seule chose à fiare. |
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() Inscription : décembre 2007 Messages : 13 ![]() |
Oui je crois que je vais changer la structure de mes tables car en effet je me lance dans des trucs un peu trop compliqué.
Algorithmiquement j'ai bien en défini le type de traitement que je souhaite faire mais je ne pense pas que ce soit possible d'implanter un tel algorithme avec des triggers. Merci pour votre aide vous m'avez fourni des reponses rapides et utiles. |
|
|
00
|
|
|
#9 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
surtout il faut laisser à l'application le soin de faire les contrôles applicatifs. Tout faire par trigger n'est pas une bonne solution à mon avis
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com