|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité de passage
![]() Inscription : janvier 2011 Messages : 6 ![]() |
Bonjour,
Alors mon souci est le suivant. J'ai deux tables sur lesquelles j'exécute un trigger : Code :
Code :
Et j'avoue ne pas bien comprendre ce qu'est la clause returning. J'ai retrouvé ce problème expliqué ici, si cela est plus clair. Voilà en remerciant d'avance ceux qui pourraient éclaircir mon problème. |
||||
|
|
00
|
|
|
#2 | ||||||||
![]() ![]() |
En 11gR1, je n'arrive pas à reproduire votre problème.
Objets Code :
Données Code :
Code :
Code :
__________________
Email : http://scr.im/waldar |
||||||||
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : janvier 2011 Messages : 6 ![]() |
Tout d'abord merci.
J'utilise la version 10G. J'ai remplacé le NEXTVAL par un CURRVAL (ce qui est une très bonne idée) et la virgule était un oubli de l'adaptation du code pour ce message. J'ai également modifié le code pour la création de ma vue en réalisant un INNER JOIN au lieu d'une clause WHERE au cas où l'erreur vienne de là (bien que, après divers tests, j'ai pu noter que le problème persistait sur une vue n'impliquant qu'une seule table) ... résultat : la même erreur s'affiche, du coup je me demande si cela vient du code. |
|
|
00
|
|
|
#4 | |
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Le problème doit effectivement venir de l'insert, à priori tu utilises la clause RETURNING pour récupérer id_a :
http://download.oracle.com/docs/cd/E...766/e19999.htm Citation:
|
|
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : janvier 2011 Messages : 6 ![]() |
ok merci de votre aide. Du coup je vais réfléchir à comment contourner le problème.
(Mais je trouvais ca quand même drôlement pratique un trigger instead of !...) |
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Mais tu peux l'utiliser, il suffit de suivre le workaroud d'oracle, utilise un select séparé après ton insert sans clause RETURNING
Tu as probablement une contrainte d'unicité sur laquelle recherchée pour récupérer la PK que tu viens d'insérer. Mais c'est sûr que c'est moins bien qu'utiliser la clause RETURNING |
|
|
00
|
|
|
#7 | |
|
Invité de passage
![]() Inscription : janvier 2011 Messages : 6 ![]() |
Certes...
Citation:
Code :
INSERT INTO T_TEST (ID,COL1) SELECT :new.ID, :new.col1 FROM V_TEST; Et donc d'après ce que je comprends, il est possible d'avoir une fonction qui utilise une clause RETURNING sans que celle ci soit pour autant clairement mentionnée dans le code? Et dans ce cas je ne comprends pas pourquoi le problème persiste lorsque j'essaye de mettre à jour une simple table avec deux colonnes (ID, COL1) à travers une vue portant sur ces deux colonnes. Il n'est nullement question ici de clause RETURNING! Désolée du coup je reviens à la charge, mais je suis perdue. |
|
|
|
00
|
|
|
#8 | |||||
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Non je conseillais (ou plutôt Oracle conseille), en reprenant les DDL de Waldar :
Code :
Citation:
Code :
|
|||||
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Inscription : janvier 2011 Messages : 6 ![]() |
Merci pour votre aide, mais cette fichue erreur est rudement tenace. Rien n'y fait.
Du coup je me suis arrangée autrement en modifiant mon modèle de données. C'est moins efficace, mais c'est viable! |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com