Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
994 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Oracle : problème requête ! MERGE INTO [RESOL] 2 bugs Oracle de fou

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Oracle : problème requête ! MERGE INTO [RESOL] 2 bugs Oracle de fou

n°1433624
Yop69
Posté le 30-08-2006 à 11:49:23  profilanswer
 

Bonjour tout le monde,
 
Voila j'aimerais synchroniser 2 tables qui ne sont pas sur le même serveur par le bias du sql "merge into...". J'en ai fais auparavant tout ce passe bien mais sur cette requete j'ai un probleme ora-00904 : identificateur non valide
 
Pourriez vous m'aider ?
 
ma requete est du type :

Code :
  1. MERGE INTO t1.a@db1 a USING
  2. ( select tmp.id2,tmp.id,tmp.lib
  3.   from
  4.       (select x.id2,x.id,x.lib from t2.X x, t2.Y y WHERE x.id = y.id ) tmp,
  5.       t1.b@db1 b
  6.    where tmp.cond > n
  7.       and tmp.id = b.id
  8. ) t
  9. ON (a.id = t.id)
  10. WHEN MATCHED THEN UPDATE
  11. set a.lib = t.lib
  12. WHEN NOT MATCHED THEN INSERT (id,lib)
  13. values(sequence_x.nextval, t.lib)

ora-00904 : identificateur non valide
 
voila sauf que j'ai toujours mon message d'erreur concernant la jointure ON (a.id = t.id) L'identificateur non valide porte sur t.id de cette jointure  :heink:  
Je ne comprends pas mais alors pas du tout, surtout que j'ai déjà réalisé ce genre de requete ailleurs et que cela marche très bien  :sarcastic:.  
 
A savoir aussi que le select de la table source marche tres bien évidemment..  :wahoo:  
 
Si vous voyez l'erreur, le bug, ou si vous avez une précision un doute... n'hésitez pas  :jap:


Message édité par Yop69 le 30-08-2006 à 14:14:19
mood
Publicité
Posté le 30-08-2006 à 11:49:23  profilanswer
 

n°1433645
Yop69
Posté le 30-08-2006 à 12:25:39  profilanswer
 

J'ai trouvé !!!!
Gros bug ou alors fonctionnement normal d'Oracle en tout cas c'est un truc de fou !!
 
Pour que la jointure se passe bien et que Oracle ne renvoie pas ora-00904 : identificateur non valide, il faut que dans le select le champ de jointure apparaisse en 1ier  :ouch:  :ouch: (tmp.id avant tmp.id2  :kaola: )
 
Un truc hallucinant, mais je suis trop content de l'avoir trouvé, sinon j'étais obligé de passer par une table temporaire (dans ce cas cela marche mais obligé d'utiliser un execute immediate ' merge into ..... ';
 
Solution :

Code :
  1. MERGE INTO t1.a@db1 a USING
  2. ( select tmp.id,tmp.id2,tmp.lib
  3.   from
  4.       (select x.id2,x.id,x.lib from t2.X x, t2.Y y WHERE x.id = y.id ) tmp,
  5.       t1.b@db1 b
  6.    where tmp.cond > n
  7.       and tmp.id = b.id
  8. ) t
  9. ON (a.id = t.id)
  10. WHEN MATCHED THEN UPDATE
  11. set a.lib = t.lib
  12. WHEN NOT MATCHED THEN INSERT (id,lib)
  13. values(sequence_x.nextval, t.lib)


Message édité par Yop69 le 30-08-2006 à 12:57:15
n°1433649
Yop69
Posté le 30-08-2006 à 12:53:53  profilanswer
 

Autre probleme maintenant, je dois remonter un champ dans le select d'une autre table (b) qui se nomment pareil (b.id). Bah quoique je fasse Oracle me fait une erreur ora-00918 : définition de colonne ambigu  :fou:  
J'hallucine la !!!!
Si je mets ma selection dans une vue : pareil !  
 
J'ai l'impression que ce merge into gère très mal les requetes sources qu'on peut lui passer (bug)
 

Code :
  1. MERGE INTO t1.a@db1 a USING
  2. ( select tmp.id as toto,tmp.id2,tmp.lib, b.id as titi
  3.   from
  4.       (select x.id2,x.id,x.lib from t2.X x, t2.Y y WHERE x.id = y.id ) tmp,
  5.       t1.b@db1 b
  6.    where tmp.cond > n
  7.       and tmp.id = b.id
  8. ) t
  9. ON (a.id = t.id)
  10. WHEN MATCHED THEN UPDATE
  11. set a.lib = t.lib
  12. WHEN NOT MATCHED THEN INSERT (id,lib)
  13. values(sequence_x.nextval, t.lib)

ora-00918 : définition de colonne ambigu


Message édité par Yop69 le 30-08-2006 à 12:55:47
n°1433715
Yop69
Posté le 30-08-2006 à 14:13:40  profilanswer
 

2ième feinte pour résoudre le 2ième bug : passer par une fonction ex nvl sur le champ selectionné posant un problème. Impressionant Oracle, c'est la première fois que je tombe sur du nimportenawak comme cela !  :heink:  
 
Solution :

Code :
  1. MERGE INTO t1.a@db1 a USING
  2. ( select tmp.id as toto,tmp.id2,tmp.lib, nvl(b.id,null) as titi
  3.   from
  4.       (select x.id2,x.id,x.lib from t2.X x, t2.Y y WHERE x.id = y.id ) tmp,
  5.       t1.b@db1 b
  6.    where tmp.cond > n
  7.       and tmp.id = b.id
  8. ) t
  9. ON (a.id = t.id)
  10. WHEN MATCHED THEN UPDATE
  11. set a.lib = t.lib, a.id = t.titi -- ATTENTION ICI BUG, ORACLE UPDATE AVEC t.toto !!!!!!!!!!!!!!!!!!
  12. WHEN NOT MATCHED THEN INSERT (id,lib)
  13. values(sequence_x.nextval, t.lib)


 
Bah non finalement ca empeche que Oracle gueule mais le merge se fait avec le 1ier id bien que j'ai mis tmp.id as toto et b.id as titi c'est tout le temps toto  :cry:  :cry:  :cry:  :cry:  :cry:  :cry:  :cry:


Message édité par Yop69 le 30-08-2006 à 14:37:52
n°1433739
betsamee
Asterisk Zeperyl
Posté le 30-08-2006 à 14:45:49  profilanswer
 

ORAKLE SAPUDUKU :o

n°1433914
orafrance
Posté le 30-08-2006 à 18:35:06  profilanswer
 

sous SQL*Plus on a un * sous la colonne qui pose problème... ce serait bien que tu fasses un copier/coller complet :)
 
betsamee -> c'est pour ça que c'est le leader mondial :D

n°1433919
betsamee
Asterisk Zeperyl
Posté le 30-08-2006 à 18:58:35  profilanswer
 

orafrance a écrit :


betsamee -> c'est pour ça que c'est le leader mondial :D


CAY LE LEADER MONDIAL DUKAKA OUI :o

n°1434443
orafrance
Posté le 31-08-2006 à 16:48:40  profilanswer
 

parole de noob :o  
 
:D

n°1434485
betsamee
Asterisk Zeperyl
Posté le 31-08-2006 à 17:21:02  profilanswer
 

[:sinking]

n°1436216
moonboot
Posté le 04-09-2006 à 13:17:03  profilanswer
 

mdr orafrance :D


Message édité par moonboot le 04-09-2006 à 13:18:19
mood
Publicité
Posté le 04-09-2006 à 13:17:03  profilanswer
 

n°1746135
kilg19
Posté le 13-06-2008 à 15:46:30  profilanswer
 

J'ai un autre problème:
 
SQL> SELECT SDO_UTIL.APPEND(c_c.geom, c_a.geom)
  2  FROM scott.regionc c_c, scott.regionc c_a  
  3  WHERE c_c.name = 'TOSCANA' and c_a.name = 'UMBRIA';
WHERE c_c.name = 'TOSCANA' and c_a.name = 'UMBRIA'
                               *
ERREUR à la ligne 3 :
ORA-00904: "C_A"."NAME" : identificateur non valide
 
et aussi:
 
SQL> SELECT SDO_UTIL.APPEND(c_c.geom, c_a.geom)
  2  FROM scott.regionc c_a, scott.regionc c_c
  3  WHERE GRUPO=1;
WHERE GRUPO=1
      *
ERREUR à la ligne 3 :
ORA-00918: définition de colonne ambigu
 
aide s'il vous plaît!!!!!!!!!!!!!!!!!! :??:

n°2253821
yaya38
Posté le 20-03-2015 à 21:09:12  profilanswer
 

bonsoir, svp j'essaye de faire une mise à jour sur le nombre de pret d'un client lors de l'ajout d'une nouvelle location pour ce dernier.... mais j'ai obtenus ces erreurs :( :(  sachant que travaille sur oracle !!  
PL/SQL: ORA-00904: "FILM"."IDFILM" : identificateur non valide
3 1 PL/SQL: SQL Statement ignored
12 23 PL/SQL: ORA-00904: "FILM"."IDFILM" : identificateur non valide
9 1 PL/SQL: SQL Statement ignored
18 23 PL/SQL: ORA-00904: "FILM"."IDFILM" : identificateur non valide
15 1 PL/SQL: SQL Statement ignored
19 8 PL/SQL: ORA-00942: Table ou vue inexistante
19 1 PL/SQL: SQL Statement ignored
 
 
CREATE OR REPLACE TRIGGER  "MAJ_NB_FILM"  
BEFORE
insert or delete or update of numbonloc on location
for each row
begin
if inserting then
update client set nbrfilmpret = nbrfilmpret+1
where numbonloc = :new.numbonloc
and location.numc = client.numc
and location.idfilm = film.idfilm;
end if;
if deleting then
update client set nbrfilmpret = nbrfilmpret-1
where numbonloc = :old.numbonloc
and location.numc = client.numc
and location.idfilm = film.idfilm;
end if;
if updating then
update client set nbrfilmpret =  nbrfilmpret+1
where numbonloc = :new.numbonloc
and location.numc = client.numc
and location.idfilm = film.idfilm;
update loction set nbrfilmprete = nbrfilmprete-1
where numbonloc = :old.numbonloc
and location.numc = client.numc
and location.idfilm = film.idfilm;
end if;
end;


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Oracle : problème requête ! MERGE INTO [RESOL] 2 bugs Oracle de fou

 

Sujets relatifs
Probleme avec les sons et ACTIVEXPerl, XML et problème accent
Problème pour récupérer la dernière id[HTML/CSS/JS] Problème de compatibilité humain/humain
Problème de compatibilité script AJAX/IEPHP et les variables de session Probleme
Content-Type Internet Exlporer, affichage dun .CSV, problème avec XMLProbleme de compilation avec GNAT
Probleme de lecture d'objet[RESOLU]Un ptit coup de pouce pour une requête SQL
Plus de sujets relatifs à : Oracle : problème requête ! MERGE INTO [RESOL] 2 bugs Oracle de fou


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR