Comment éviter les ORA-3814 erreur sur la fusion?
J'ai un code comme celui-ci
MERGE INTO target_table tgt
USING source_table src
on(tgt.c1=src.c1)
WHEN MATCHED THEN
UPDATE SET tgt.c1=src.c2
- Je obtenir ORA-38104: Columns referenced in the ON clause cannot be updated
. Je comprends la raison de cette erreur. Mais comment peut-on réécrire ce code? Est-il possible sans l'aide du curseur?
OriginalL'auteur Vivek | 2011-10-25
Vous devez vous connecter pour publier un commentaire.
Comment à ce sujet, la jointure externe signifie que le
rid
sera nulle et ne sont donc pas, et ainsi de circuler dans laWHEN NOT MATCHED
partie de la déclaration, si vous en avez unORA-01445-cannot select ROWID from a join view without a key-preserved table Cause: A SELECT statement attempted to select ROWIDs from a view derived from a join operation. Because the rows selected in the view do not correspond to underlying physical records, no ROWIDs can be returned.
si j'utilise cette requêteVous devez être en train de faire quelque chose de légèrement différent. Êtes-vous sûr que vous avez
t2.ROWID AS something
? Il ne serait PAS valide pour utilisersrc.ROWID
c'est pourquoi j'ai alias ilAS rid
Oui, vous avez raison. J'ai manqué de renommer
t2.ROWID
commerid
. Son travail très bien, après j'ai ajouter le nom d'alias. Merci Sodved 🙂C'était génial , mais, C'était de travailler avec moi sur les mises à jour mais n'a pas insérer de lignes quand j'ai essayer avec "when not matched then' instruction. Merci de m'aider. aussi j'ai essayé avec insertion de plusieurs colonnes à l'aide de la src.nom de même pour les colonnes. néanmoins, il dit 0 lignes fusionnées même il n'a pas été suivie. Serait d'une grande aide si je peux obtenir un peu d'aide ici.
OriginalL'auteur Sodved
Vous pouvez exploiter des solutions de contournement pour les ORA-38104, qui semblent fonctionner jusqu'Oracle 18c, y compris celui-ci, où vous enveloppez vos colonnes dans une ligne de la valeur de l'expression qui contient une plus factice expression:
OriginalL'auteur Lukas Eder