Bonjour, est ce possiblede faire un merge sur des variables?
Je m'explique: dans ma clause USING, je veux utiliser des variables definies précedemment...Puis je le faire?
Merci
Bonjour, est ce possiblede faire un merge sur des variables?
Je m'explique: dans ma clause USING, je veux utiliser des variables definies précedemment...Puis je le faire?
Merci
as-tu testé ? As-tu un message d'erreur que tu ne comprends pas ?
Dans mon using, je ne sais pas quoi mettre pour que mes variables définies precedemments soient acceptées.
Si je les mets sous forme de liste, j'ai un message comme quoi je n'ai pas de select dans mon USING...
Et avec un SELECT from dual ?
Laly.
Avec un select from dual j'ai un message "identificateur maVariable non valide"...
si tu postais un bout de code ce serait plus simple pour t'aider non ?Envoyé par kluh
utilises tu le SQL dynamique et EXECUTE IMMEDIATE ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 DECLARE C_date integer; C_cor1 integer; C_cor2 integer; C_cor3 integer; CURSOR C1 IS select T1.ID T0.COR1, T0.COR2, T0.COR3 from TMP T0, DI_DATE T1 where T0.DATJOUR = T1.DATE_JOUR; BEGIN OPEN C1; LOOP FETCH C1 INTO C_date, C_cor1, C_cor2, C_cor3; EXIT WHEN C1%NOTFOUND OR C1%NOTFOUND IS NULL; if C_cor1 <> '0' then MERGE INTO MA_TABLE USING (select C_date from dual) ON (C_date = di_date_id) WHEN MATCHED THEN UPDATE SET nb_correspondance = C_cor1 WHEN NOT MATCHED THEN INSERT (DI_DATE_ID, NB_CORRESPONDANCE) VALUES (C_date, C_cor1); end if; END LOOP; CLOSE C1; END;
Donc personne ne connait un moyen de recupérer des valeurs de variables via un select?
la syntaxe de INSERT c'est INSERT INTO
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 WHEN NOT MATCHED THEN INSERT (DI_DATE_ID, NB_CORRESPONDANCE)
exact, et c'est quoi le message d'erreur avec ton code ?
Essaye :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 MERGE INTO MA_TABLE M USING (select C_date,C_cor1 from dual) S ON (S.C_date = M.di_date_id) WHEN MATCHED THEN UPDATE SET nb_correspondance = S.C_cor1 WHEN NOT MATCHED THEN INSERT (DI_DATE_ID, NB_CORRESPONDANCE) VALUES (S.C_date, S.C_cor1);
Enfin, c'est quand même très compliqué... Voila ce que tu pourrais faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 CURSOR C1 IS select T1.ID, T0.COR1, T0.COR2, T0.COR3 from TMP T0, DI_DATE T1 where T0.DATJOUR = T1.DATE_JOUR and T0.COR1 <> '0'; BEGIN FOR R IN C1 LOOP UPDATE MA_TABLE SET nb_correspondance = R.cor1 WHERE di_date_id = R.ID; IF SQL%ROWCOUNT = 0 THEN INSERT INTO MA_TABLE (DI_DATE_ID, NB_CORRESPONDANCE) VALUES (R.ID, R.cor1); END IF; END LOOP; END; /
Mon select C_date from dual n'est toujours pas accepté...
Alors là, je ne suis pas tout à fait d'accord....
générer des activités "bidons" pour tracer et faire "réinventer la roue" pour faire ce que fait une fonction native sous prétexte qu'on n'arrive pas à l'utiliser, c'est loin d'être idéal, notamment du point de vue des perfs....
Je n'arrive pas à écrire mon UPDATE, pas grave, je vais faire un DELETE et ensuite un INSERT !
qui parle de DELETE + INSERT ?
kluh est-ce que tu vas finir par nous donner l'erreur COMPLETE STP ?
Envoyé par orafrance
ORA-00904: "T1"."C_DATE" : identificateur non valide
ORA-06512: à ligne 38
t'as pas de T1.C_DATE... j'comprends rien... t'es sûr que c'est le "vrai" code que tu nous as donnée ?
J'avais esayé de mettre des alias...
En remettant exactement le code que j'ai posté, voilà ce que j'ai:
ORA-00904: "C_DATE" : identificateur non valide
ORA-06512: à ligne 38
L'erreur porte sur la ligne select...from dual
Alors, personne n'est inspiré après le week end?
Pourquoi pas du SQL dynamique et un execute immediate ?
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager