Question

Je reçois "ORA-01779: Impossible de modifier une colonne qui mappe à une table non préservée" lorsque j'essaie de mettre à jour une jointure. J'ai cherché autour du site et trouvé beaucoup de conseils sur ce que signifie Key-conservé et pourquoi il est nécessaire ... mais aussi près que je puisse dire, je me conforme à ces conseils, et à obtenir l'erreur.

J'ai deux tables:

PG_LABLOCATION has, among other things, the columns:
"LABLOCID" NUMBER,
"DNSNAME" VARCHAR2(200 BYTE)

LABLOCID is the primary key, DNSNAME has a unique constraint

PG_MACHINE has, among other things, the columns:
"MACHINEID" NUMBER, 
"LABLOCID" NUMBER, 
"IN_USE" NUMBER(1,0) DEFAULT 0, 
"UPDATE_TIME" TIMESTAMP (6) DEFAULT '01-JAN-1970'

MACHINEID is a primary key
LABLOCID is a foreign key into LABLOCID in PG_LABLOCATION (its primary key)

La mise à jour que je cours est:

update 
  (select mac.in_use, mac.update_time
     from pg_machine mac 
     inner join pg_lablocation loc
       on mac.lablocid = loc.lablocid
     where loc.dnsname = 'value'
       and '02-JAN-2013' > mac.update_time
  )
set in_use = 1 - MOD( 101, 2 ), update_time = '02-JAN-2013';

Je ne met à jour que les valeurs dans un tableau (pg_machine) et la colonne de jointure dans l'autre tableau est la clé principale, ce qui devrait le rendre préservé par la clé par ma lecture. Je crains que la clause WHERE provoque le problème, mais j'ai essayé de retirer le filtre sur mac.update_time et j'ai obtenu la même erreur, et loc.dnsname a une contrainte unique.

Ce qui est encore plus ouvert, c'est que nous avons, comme beaucoup de gens, un développement et un environnement prod. Nous avons fait un schéma complet et une migration de données de Prod to Dev. Je les ai regardés tous les deux et ils ont des indices et des contraintes identiques. La requête fonctionne dans Dev, mais génère l'erreur ci-dessus dans prod.

Donc deux questions:

1) Pouvez-vous voir ce qui ne va pas avec ma requête? 2) Pouvez-vous suggérer ce qui pourrait être différent entre mon environnement Dev et Prod (par exemple, par exemple les paramètres du serveur) qui pourraient provoquer cette erreur dans l'un mais pas l'autre?

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top