IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

Merge avec variables


Sujet :

Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 134
    Points : 46
    Points
    46
    Par défaut Merge avec variables
    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

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    as-tu testé ? As-tu un message d'erreur que tu ne comprends pas ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 134
    Points : 46
    Points
    46
    Par défaut
    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...

  4. #4
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Et avec un SELECT from dual ?


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 134
    Points : 46
    Points
    46
    Par défaut
    Avec un select from dual j'ai un message "identificateur maVariable non valide"...

  6. #6
    Membre averti
    Inscrit en
    Novembre 2002
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 549
    Points : 436
    Points
    436
    Par défaut
    Citation Envoyé par kluh
    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 ?

    utilises tu le SQL dynamique et EXECUTE IMMEDIATE ?
    PpPool

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 134
    Points : 46
    Points
    46
    Par défaut
    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;

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 134
    Points : 46
    Points
    46
    Par défaut
    Donc personne ne connait un moyen de recupérer des valeurs de variables via un select?

  9. #9
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     WHEN NOT MATCHED THEN
         INSERT (DI_DATE_ID, NB_CORRESPONDANCE)
    la syntaxe de INSERT c'est INSERT INTO

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 134
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par orafrance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     WHEN NOT MATCHED THEN
         INSERT (DI_DATE_ID, NB_CORRESPONDANCE)
    la syntaxe de INSERT c'est INSERT INTO
    Pas dans un MERGE...

  11. #11
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    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;
    /

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 134
    Points : 46
    Points
    46
    Par défaut
    Mon select C_date from dual n'est toujours pas accepté...

  13. #13
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    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 !

  14. #14
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    qui parle de DELETE + INSERT ?

    kluh est-ce que tu vas finir par nous donner l'erreur COMPLETE STP ?

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 134
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par orafrance
    qui parle de DELETE + INSERT ?

    kluh est-ce que tu vas finir par nous donner l'erreur COMPLETE STP ?

    ORA-00904: "T1"."C_DATE" : identificateur non valide
    ORA-06512: à ligne 38

  16. #16
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    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 ?

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 134
    Points : 46
    Points
    46
    Par défaut
    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

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 134
    Points : 46
    Points
    46
    Par défaut
    Alors, personne n'est inspiré après le week end?

  19. #19
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Pourquoi pas du SQL dynamique et un execute immediate ?
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

Discussions similaires

  1. Merge avec 2 variables
    Par sophie_2525 dans le forum SAS Base
    Réponses: 8
    Dernier message: 30/07/2012, 14h35
  2. Merge avec sélection de variables ?
    Par Froggy007 dans le forum R
    Réponses: 2
    Dernier message: 26/09/2011, 19h21
  3. [DATA] merge avec variables ayant des formats
    Par AlexFred dans le forum SAS Base
    Réponses: 15
    Dernier message: 23/12/2009, 11h34
  4. Boucle avec variable à incrémenter
    Par snoop dans le forum Linux
    Réponses: 2
    Dernier message: 19/03/2004, 11h07
  5. Cacher Variable Url avec Variable Globale
    Par danuz dans le forum XMLRAD
    Réponses: 6
    Dernier message: 26/09/2003, 17h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo