|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Bonjour,
Je suis plus habitué à l'écriture de triggers sous SQL Server que sous Oracle. Je souhaite faire un trigger "global" (donc pas "for each row"). Lorsque les données inserrées correspondent à certains critères, je souhaite forcer la valeur inserrée. Voici ce que j'ai tenté d'écrire : Code :
Erreur(2,4): PL/SQL: SQL Statement ignored Erreur(2,11): PL/SQL: ORA-00942: table or view does not exist Pour le première erreur, j'ai aucune idée d'où ça vient. Et pour la seconde, j'en déduis que "new" n'existe pas... Et ":new" me fait une erreur du même acabit. |
||
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
En mode FOR EACH ROW, voici ce que ça donne :
Code :
|
||
|
|
00
|
|
|
#3 |
![]() ![]() |
Un trigger sans "FOR EACH ROW" est appelé une fois par requête.
Le trigger avec est appelé une fois par ligne. Vu le besoin, seule la proposition FOR EACH ROW est valide ! Et en effet, pas de table "new" ou "inserted", Oracle travaille avec les références de colonnes :new / :old.
__________________
Email : http://scr.im/waldar |
|
00
|
|
|
#4 |
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Ok.
Ben pour une fois que je voulais faire un PL ensembliste... Pour le coup, c'est un peu pourri Oracle là... Donc on est obligé de se taper systématiquement un curseur quand on travaille avec un trigger Oracle et qu'on doit pouvoir manipuler les données modifiées ? |
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() Inscription : août 2009 Messages : 779 ![]() |
Si vous pouvez identifer toutes vos lignes avec du SQL, pas la peine de faire du FOR EACH ROW, bien sûr, mais votre besoin semble fortement lié à chaque insertion.
Cela dit, une façon de faire encore plus simple serait que dans ce cas particulier, les valeurs soient directement les bonnes, plutôt que de les modifier a posteriori avec un trigger. |
|
|
00
|
|
|
#6 | ||||
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Citation:
Ensuite, je dois permettre de mettre une valeur "à la main". Donc en aucun cas, je peux faire mon UPDATE directement sur la table EVL. En revanche, je voudrais pouvoir le faire sur les données inserrés. Citation:
AFFEMP : Citation:
Citation:
Mais je te rassure, je ne m'amuse pas à écrire des triggers pour le plaisir... Moi aussi je préférerais que le progiciel fasse son boulot sans bugs... |
||||
|
|
00
|
|
|
#7 | |||
![]() ![]() |
Citation:
D'ailleurs il n'y a pas de vide en Oracle, ils sont transposés en null : Code :
__________________
Email : http://scr.im/waldar |
|||
|
00
|
|
|
#8 | |||
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Citation:
L'ERP Generix ne supporte pas les NULL (ça fait des croûtages en flammes quand il rencontre un NULL). Donc les champs "vide" contiennent ' ' Et ce comportement d'Oracle, si je ne m'abuse est lié au type VARCHAR2 non ? Il me semble bien que VARCHAR supporte les chaines vides et/ou qu'une option permet de les prendre en charge. |
|||
|
|
00
|
|
|
#9 | |
![]() ![]() |
Je pense que c'est quelque chose qu'ils ont développé il y a très longtemps sans faire la distinction entre vide et null et que c'est resté ainsi car très vite trop impactant.
Sur la documentation 11g, on retrouve cette citation très intéressante : Citation:
__________________
Email : http://scr.im/waldar |
|
|
10
|
|
|
#10 |
|
Expert Confirmé Sénior
![]() François Chef de projet NTIC Inscription : janvier 2007 Messages : 5 353 ![]() |
Je suppose qu'il faut lire "références de lignes :new et :old" ici ?
__________________
Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça... Une réponse vous a aidé ? utiliser le bouton "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com