Y a t-il une erreur au niveau du code?
Version imprimable
Y a t-il une erreur au niveau du code?
Nul besoin de jointure externe (je me demande où avez-vous pu lire ceci).
Ce que mnitu vous disait se traduit ainsi :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 MERGE INTO PPP_MAIN_TRANSFERT D USING ( SELECT UPP_NAM, UPP_FNA, UPP_LOG, UPP_PWD, UPP_STA, UPP_INM, UPP_END, UPP_MEL, UPP_IPA, UPP_SST, UPP_PSS, TIT_KEY, CIV_KEY, AUD_KEY, UPP_PPW, UPP_DPW, UPP_TIC, UPP_SUD, UPP_INN, CPS_KEY, MAU_KEY, UPP_WWI, UPP_EXT, UPP_UPD, UPP_SGN, UPP_DAD, UPP_DAF, UPP_AMS FROM PPP_UPP ) S ON (D.PER_NAM = S.UPP_NAM AND D.PER_FNA = S.UPP_FNA AND D.UPP_LOG = S.UPP_LOG) WHEN MATCHED THEN UPDATE SET D.UPP_PWD = S.UPP_PWD, D.UPP_STA = S.UPP_STA, D.UPP_INM = S.UPP_INM, D.UPP_END = S.UPP_END, D.UPP_MEL = S.UPP_MEL, D.UPP_IPA = S.UPP_IPA, D.UPP_SST = S.UPP_SST, D.UPP_PSS = S.UPP_PSS, D.TIT_KEY = S.TIT_KEY, D.CIV_KEY = S.CIV_KEY, D.AUD_KEY = S.AUD_KEY, D.UPP_PPW = S.UPP_PPW, D.UPP_DPW = S.UPP_DPW, D.UPP_TIC = S.UPP_TIC, D.UPP_SUD = S.UPP_SUD, D.UPP_INN = S.UPP_INN, D.CPS_KEY = S.CPS_KEY, D.MAU_KEY = S.MAU_KEY, D.UPP_WWI = S.UPP_WWI, D.UPP_EXT = S.UPP_EXT, D.UPP_UPD = S.UPP_UPD, D.UPP_SGN = S.UPP_SGN, D.UPP_DAD = S.UPP_DAD, D.UPP_DAF = S.UPP_DAF WHEN NOT MATCHED THEN INSERT ( UPP_NAM, UPP_FNA, UPP_LOG, UPP_PWD, UPP_STA, UPP_INM, UPP_END, UPP_MEL, UPP_IPA, UPP_SST, UPP_PSS, TIT_KEY, CIV_KEY, AUD_KEY, UPP_PPW, UPP_DPW, UPP_TIC, UPP_SUD, UPP_INN, CPS_KEY, MAU_KEY, UPP_WWI, UPP_EXT, UPP_UPD, UPP_SGN, UPP_DAD, UPP_DAF, UPP_AMS ) VALUES ( S.UPP_NAM, S.UPP_FNA, S.UPP_LOG, S.UPP_PWD, S.UPP_STA, S.UPP_INM, S.UPP_END, S.UPP_MEL, S.UPP_IPA, S.UPP_SST, S.UPP_PSS, S.TIT_KEY, S.CIV_KEY, S.AUD_KEY, S.UPP_PPW, S.UPP_DPW, S.UPP_TIC, S.UPP_SUD, S.UPP_INN, S.CPS_KEY, S.MAU_KEY, S.UPP_WWI, S.UPP_EXT, S.UPP_UPD, S.UPP_SGN, S.UPP_DAD, S.UPP_DAF, S.UPP_AMS );
Peut-être :
Après, faudrait aussi essayer de comprendre pour écrire la requête correctement. Le forum est fait pour t'aider, pas pour faire ton boulot.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 MERGE INTO ppp_main_transfert D USING ( SELECT upp_nam,upp_fna,upp_log,upp_pwd,upp_sta,upp_inm,upp_end,upp_mel,upp_ipa,upp_sst,upp_pss,tit_key,civ_key,aud_key,upp_ppw, upp_dpw,upp_tic,upp_sud,upp_inn,cps_key,mau_key,upp_wwi,upp_ext,upp_upd,upp_sgn,upp_dad,upp_daf,upp_ams FROM ppp_upp ) S ON (D.PER_NAM = S.UPP_NAM AND D.PER_FNA = S.UPP_FNA AND D.UPP_LOG = S.UPP_LOG) WHEN MATCHED THEN UPDATE SET D.UPP_PWD = S.UPP_PWD, D.UPP_DAD = S.UPP_DAD, D.UPP_DAF = S.UPP_DAF, D.UPP_SGN = S.UPP_SGN, D.UPP_STA = S.UPP_STA, D.UPP_INM = S.UPP_INM, D.UPP_END = S.UPP_END, D.UPP_MEL = S.UPP_MEL, D.UPP_IPA = S.UPP_IPA, D.UPP_SST = S.UPP_SST, D.UPP_PSS = S.UPP_PSS, D.TIT_KEY = S.TIT_KEY, D.CIV_KEY = S.CIV_KEY, D.AUD_KEY = S.AUD_KEY, D.UPP_PPW = S.UPP_PPW, D.UPP_DPW = S.UPP_DPW, D.UPP_TIC = S.UPP_TIC, D.UPP_SUD = S.UPP_SUD, D.UPP_INN = S.UPP_INN, D.CPS_KEY = S.CPS_KEY, D.MAU_KEY = S.MAU_KEY, D.UPP_WWI = S.UPP_WWI, D.UPP_EXT = S.UPP_EXT, D.UPP_UPD = S.UPP_UPD WHEN NOT MATCHED THEN INSERT VALUES ( S.UPP_NAM,S.UPP_FNA,S.UPP_LOG,S.UPP_PWD,S.UPP_STA,S.UPP_INM,S.UPP_END, S.UPP_MEL,S.UPP_IPA,S.UPP_SST,S.UPP_PSS,S.TIT_KEY,S.CIV_KEY,S.AUD_KEY, S.UPP_PPW,S.UPP_DPW,S.UPP_TIC,S.UPP_SUD,S.UPP_INN,S.CPS_KEY,S.MAU_KEY, S.UPP_WWI,S.UPP_EXT,S.UPP_UPD,S.UPP_SGN,S.UPP_DAD,S.UPP_DAF,S.UPP_AMS );
Je sais très bien que vous êtes là pour m'aider et non pour faire mon boulot je suis vraiment débutant et j'ai besoin de votre aide et là en testant le code que vous m'avez posté j'ai toujours un message d'erreur
Code:ORA-00947: nombre de valeurs insuffisant
Google est ton ami :mrgreen:
En fait ma table transfert comprend des colonnes de plusieurs autres tables et ma table ppp_upp contient certaines colonnes de ma table transfert. Donc ce que je souhaite faire c'est mettre à jour ma table ppp_upp en fonction de ma table transfert.
Donc, là j'ai inversé les noms des tables et j'ai l'erreur que j'ai cité précédemment
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 MERGE INTO ppp_upp D USING ( SELECT per_nam,per_fna,upp_log,upp_pwd,upp_sta,upp_inm,upp_end,upp_mel,upp_ipa,upp_sst,upp_pss,tit_key,civ_key,aud_key,upp_ppw, upp_dpw,upp_tic,upp_sud,upp_inn,cps_key,mau_key,upp_wwi,upp_ext,upp_upd,upp_sgn,upp_dad,upp_daf,upp_ams FROM ppp_main_transfert ) S ON (D.UPP_NAM = S.PER_NAM AND D.UPP_FNA = S.PER_FNA AND D.UPP_LOG = S.UPP_LOG) WHEN MATCHED THEN UPDATE SET D.UPP_PWD = S.UPP_PWD, D.UPP_DAD = S.UPP_DAD, D.UPP_DAF = S.UPP_DAF, D.UPP_SGN = S.UPP_SGN, D.UPP_STA = S.UPP_STA, D.UPP_INM = S.UPP_INM, D.UPP_END = S.UPP_END, D.UPP_MEL = S.UPP_MEL, D.UPP_IPA = S.UPP_IPA, D.UPP_SST = S.UPP_SST, D.UPP_PSS = S.UPP_PSS, D.TIT_KEY = S.TIT_KEY, D.CIV_KEY = S.CIV_KEY, D.AUD_KEY = S.AUD_KEY, D.UPP_PPW = S.UPP_PPW, D.UPP_DPW = S.UPP_DPW, D.UPP_TIC = S.UPP_TIC, D.UPP_SUD = S.UPP_SUD, D.UPP_INN = S.UPP_INN, D.CPS_KEY = S.CPS_KEY, D.MAU_KEY = S.MAU_KEY, D.UPP_WWI = S.UPP_WWI, D.UPP_EXT = S.UPP_EXT, D.UPP_UPD = S.UPP_UPD WHEN NOT MATCHED THEN INSERT VALUES ( S.PER_NAM,S.PER_FNA,S.UPP_LOG,S.UPP_PWD,S.UPP_STA,S.UPP_INM,S.UPP_END, S.UPP_MEL,S.UPP_IPA,S.UPP_SST,S.UPP_PSS,S.TIT_KEY,S.CIV_KEY,S.AUD_KEY, S.UPP_PPW,S.UPP_DPW,S.UPP_TIC,S.UPP_SUD,S.UPP_INN,S.CPS_KEY,S.MAU_KEY, S.UPP_WWI,S.UPP_EXT,S.UPP_UPD,S.UPP_SGN,S.UPP_DAD,S.UPP_DAF,S.UPP_AMS );
Je sais c'est pourquoi que j'ai précisé que je suis débutant !
C'est pas gentil :cry: lol
Imaginez que je vous parlais en chinois vous auriez eu les mêmes réactions que moi !!!
Ca n'excuse rien. Là on en est réduit à deviner le travail qui t'es demandé, les éléments qui permettent de le faire et finalement te donner la solution finale.
Ca dépasse de loin l'objet du forum. Je te prie donc de bien vouloir lire le lien que je t'ai envoyé pour comprendre la commande MERGE, rechercher la signification des messages d'erreurs que tu reçois, réfléchir à tout ça et finalement revenir quand tu as des questions précises et pas simplement : ça marche pas, qu'est ce qu'il faut faire pour que ça marche.
Merci d'avance pour ta compréhension :)
Ok merci !
Vraiment, sans chercher à vous nuire, si vous êtes au travail demandez une formation SQL, jusqu'à preuve du contraire il n'y a pas de honte à ne pas savoir faire ce qu'on n'a pas appris.
Si vous êtes étudiant, n'hésitez pas à demander des éclaircissements à vos professeurs et camarades de classes.
Si vous êtes étudiant et que vous avez séché tous les cours de base de données, achetez des livres ou allez à la bibliothèque !
Il y a toujours au moins une solution à un défaut de connaissance, nous avons tous été débutant après tout.
la syntaxe de l'insert c'est bien
ouCode:insert values ( )
Code:insert ( ) values ( )
Est ce que je peux faire juste l'update d'abord comme ceci
ca j'ai essayé et la table destination ne se met pas à jour (j'ai essayé de modifié le champs ams dans la table cible et j'ai exécuté l'update et j'ai eu comme messageCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 MERGE INTO PPP_UPP D USING (SELECT PER_NAM,PER_FNA,UPP_LOG,UPP_PWD,UPP_STA,UPP_INM,UPP_END, UPP_MEL,UPP_IPA,UPP_SST,UPP_PSS,TIT_KEY,CIV_KEY,AUD_KEY, UPP_PPW,UPP_DPW,UPP_TIC,UPP_SUD,UPP_INN,CPS_KEY,MAU_KEY, UPP_WWI,UPP_EXT,UPP_UPD,UPP_SGN,UPP_DAD,UPP_DAF,UPP_AMS FROM PPP_MAIN_TRANSFERT) S ON (D.UPP_NAM = S.PER_NAM AND D.UPP_FNA = S.PER_FNA AND D.UPP_LOG = S.UPP_LOG) WHEN MATCHED THEN UPDATE SET D.UPP_PWD = S.UPP_PWD, D.UPP_DAD = S.UPP_DAD, D.UPP_DAF = S.UPP_DAF, D.UPP_SGN = S.UPP_SGN, D.UPP_STA = S.UPP_STA, D.UPP_INM = S.UPP_INM, D.UPP_END = S.UPP_END, D.UPP_MEL = S.UPP_MEL, D.UPP_IPA = S.UPP_IPA, D.UPP_SST = S.UPP_SST, D.UPP_PSS = S.UPP_PSS, D.TIT_KEY = S.TIT_KEY, D.CIV_KEY = S.CIV_KEY, D.AUD_KEY = S.AUD_KEY, D.UPP_PPW = S.UPP_PPW, D.UPP_DPW = S.UPP_DPW, D.UPP_TIC = S.UPP_TIC, D.UPP_SUD = S.UPP_SUD, D.UPP_INN = S.UPP_INN, D.CPS_KEY = S.CPS_KEY, D.MAU_KEY = S.MAU_KEY, D.UPP_WWI = S.UPP_WWI, D.UPP_EXT = S.UPP_EXT, D.UPP_UPD = S.UPP_UPD
mais la modification ne s'est pas faiteCode:
1
21 lignes fusionné
il faut lancer la commandepour valider la modification après un update, insert, delete ou merge.Code:COMMIT;
Bonjour.
Les deux syntaxes fonctionnent mais la seconde est préférable.
Si vous utilisez la première, il faut que les valeurs dans "VALUES(...)" correspondent exactement à toutes les colonnes de la table.
Si vous utilisez la seconde, dans le "INSERT(...)", vous précisez le nom des colonnes dont vous indiquez les valeurs ensuite. Dans ce cas, vous pouvez omettre les colonnes non obligatoires de la table.
Cette syntaxe est préférable au moins pour une question de lisibilité et de maintenance du code.
Merci pour toutes les réponses mais à chaque fois que j'avance d'un pas j'ai une erreur.
VOILA une autre erreur : Erreur SQL : ORA-00925: mot-clé INTO absent
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 MERGE INTO PPP_UPP D USING (SELECT PER_NAM,PER_FNA,UPP_LOG,UPP_PWD,UPP_STA,UPP_INM,UPP_END, UPP_MEL,UPP_IPA,UPP_SST,UPP_PSS,TIT_KEY,CIV_KEY,AUD_KEY, UPP_PPW,UPP_DPW,UPP_TIC,UPP_SUD,UPP_INN,CPS_KEY,MAU_KEY, UPP_WWI,UPP_EXT,UPP_UPD,UPP_SGN,UPP_DAD,UPP_DAF,UPP_AMS FROM PPP_MAIN_TRANSFERT) S ON (D.UPP_NAM = S.PER_NAM AND D.UPP_FNA = S.PER_FNA AND D.UPP_LOG = S.UPP_LOG) WHEN MATCHED THEN UPDATE SET D.UPP_PWD = S.UPP_PWD, D.UPP_DAD = S.UPP_DAD, D.UPP_DAF = S.UPP_DAF, D.UPP_SGN = S.UPP_SGN, D.UPP_STA = S.UPP_STA, D.UPP_INM = S.UPP_INM, D.UPP_END = S.UPP_END, D.UPP_MEL = S.UPP_MEL, D.UPP_IPA = S.UPP_IPA, D.UPP_SST = S.UPP_SST, D.UPP_PSS = S.UPP_PSS, D.TIT_KEY = S.TIT_KEY, D.CIV_KEY = S.CIV_KEY, D.AUD_KEY = S.AUD_KEY, D.UPP_PPW = S.UPP_PPW, D.UPP_DPW = S.UPP_DPW, D.UPP_TIC = S.UPP_TIC, D.UPP_SUD = S.UPP_SUD, D.UPP_INN = S.UPP_INN, D.CPS_KEY = S.CPS_KEY, D.MAU_KEY = S.MAU_KEY, D.UPP_WWI = S.UPP_WWI, D.UPP_EXT = S.UPP_EXT, D.UPP_UPD = S.UPP_UPD, D.UPP_AMS = S.UPP_AMS; WHEN NOT MATCHED THEN INSERT ( UPP_NAM, UPP_FNA, UPP_LOG, UPP_PWD, UPP_STA, UPP_INM, UPP_END, UPP_MEL, UPP_IPA, UPP_SST, UPP_PSS, TIT_KEY, CIV_KEY, AUD_KEY, UPP_PPW, UPP_DPW, UPP_TIC, UPP_SUD, UPP_INN, CPS_KEY, MAU_KEY, UPP_WWI, UPP_EXT, UPP_UPD, UPP_SGN, UPP_DAD, UPP_DAF, UPP_AMS ) VALUES ( S.PER_NAM, S.PER_FNA, S.UPP_LOG, S.UPP_PWD, S.UPP_STA, S.UPP_INM, S.UPP_END, S.UPP_MEL, S.UPP_IPA, S.UPP_SST, S.UPP_PSS, S.TIT_KEY, S.CIV_KEY, S.AUD_KEY, S.UPP_PPW, S.UPP_DPW, S.UPP_TIC, S.UPP_SUD, S.UPP_INN, S.CPS_KEY, S.MAU_KEY, S.UPP_WWI, S.UPP_EXT, S.UPP_UPD, S.UPP_SGN, S.UPP_DAD, S.UPP_DAF, S.UPP_AMS ); COMMIT;
Bonjour,
As tu bien regardé la syntaxe du merge
il n'y a pas de ";" a la fin de UPDATE sinon Oracle ne comprend pas la suite
Pour lui c'est 2 instructinos distinctes avec le ";" de trop
le ";" est a enlever ...Code:
1
2
3
4
5
6
7
8
9 UPDATE SET D.UPP_PWD = S.UPP_PWD, D.UPP_DAD = S.UPP_DAD, D.UPP_DAF = S.UPP_DAF, D.UPP_SGN = S.UPP_SGN, D.UPP_STA = S.UPP_STA, D.UPP_INM = S.UPP_INM, D.UPP_END = S.UPP_END, D.UPP_MEL = S.UPP_MEL, D.UPP_IPA = S.UPP_IPA, D.UPP_SST = S.UPP_SST, D.UPP_PSS = S.UPP_PSS, D.TIT_KEY = S.TIT_KEY, D.CIV_KEY = S.CIV_KEY, D.AUD_KEY = S.AUD_KEY, D.UPP_PPW = S.UPP_PPW, D.UPP_DPW = S.UPP_DPW, D.UPP_TIC = S.UPP_TIC, D.UPP_SUD = S.UPP_SUD, D.UPP_INN = S.UPP_INN, D.CPS_KEY = S.CPS_KEY, D.MAU_KEY = S.MAU_KEY, D.UPP_WWI = S.UPP_WWI, D.UPP_EXT = S.UPP_EXT, D.UPP_UPD = S.UPP_UPD, D.UPP_AMS = S.UPP_AMS;