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

SQL Oracle Discussion :

Transcrire "Merge into"


Sujet :

SQL Oracle

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Transcrire "Merge into"
    Bonjour

    il m'a été demandé de transcrire un ordre sql utilisant la commande merge into (utilisée à partir de oracle 9i) en un ordre sql ansi, sachant que le système sur lequel je travaille n'a pas été mis à jour depuis très longtemps (je sais que la commande merge into a été ajoutée dans les dernières maj de l'ansi) .
    Plus précisémment, comment peut-on transcrire un merge into insert et un merge into update?

    Merci d'avance pour vos réponses

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE ...
    IF SQL%ROWCOUNT=0
    THEN
     INSERT ..
    END IF;

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 270
    Points : 342
    Points
    342
    Par défaut
    Citation Envoyé par McM Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE ...
    IF SQL%ROWCOUNT=0
    THEN
     INSERT ..
    END IF;
    Ca, c'est si tu travaille ligne à ligne, Je pense que c'est un poil plus compliqué !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Insert .... where not exists...;
    Update ... where exists...;

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    493
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 493
    Points : 605
    Points
    605
    Par défaut
    ce serait peut être intéressant de connaître le statement en question et la release de ta db cible

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Voici le statement en question

    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
    Merge  Into Ta_Contrat_Etat_Contrat  T1
    Using  
    (
    	 Select    
    	 Cod_Contrat,
    	 Dat_Debut, 
    	 Dat_Fin_Calculee,
    	 Top_Actuel_Calculee
    	 From
             (
       		 Select  
       		 A . Cod_Contrat Cod_Contrat ,  
       		 Dat_Debut ,
       			  		  Nvl (( Lag ( A.Dat_Debut , 1 ) Over (Partition   By  A.Cod_Contrat  Order   By  Dat_Debut  Desc))- 1 , '31/12/2999' )  Dat_Fin_Calculee ,
       			  		  Decode (( Lag ( A.Dat_Debut , 1 ) Over (Partition   By  A.Cod_Contrat  Order   By  Dat_Debut  Desc))- 1 ,null, 1 , 0 )  Top_Actuel_Calculee ,
       			  		  (Case   When   ( Max  ( Dat_Debut ) Over (Partition   By  A.Cod_Contrat ))   > Dat_Arretee_Prec  Then   1   Else   0   End)  Top_Contrat_Impacte
                  From  
          		  		ta_Contrat_Etat_Contrat  A ,
                  		tp_Pilotage_Arrete  B
                  Where  
          		  		 A . Dat_Fin  >=  B . Dat_Arretee_Prec
                  )  T2
     			  Where  Top_Contrat_Impacte = 1
        )  T3
    On   
     	  (T1.Dat_Debut = T3.Dat_Debut  And  T1.Cod_Contrat = T3.Cod_Contrat)
    When  Matched  Then  
    	  Update   
    	  Set  
    	  	   T1.Dat_Fin   =  T3.Dat_Fin_Calculee,
    		   T1.Top_Actuel =   T3.Top_Actuel_Calculee
    When   Not  Matched  Then
    	   Insert   (Cod_Contrat)   Values   (T3.Cod_Contrat)
    ;

  6. #6
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par jmguiche Voir le message
    Ca, c'est si tu travaille ligne à ligne, Je pense que c'est un poil plus compliqué !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Insert .... where not exists...;
    Update ... where exists...;
    Hm!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    insert where not exists
    ajoute les enregistrements qui n’existent pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    update where exists
    modifie les enregistrements qui existent y compris ceux qui ont été inserès par l'insert précedent.

    Mais ta remarque est juste c’est juste pour t’embêter.

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup pour l'aide, je vais utiliser les conseils que vous m'avez distillé

Discussions similaires

  1. Quote et double quote
    Par aktos dans le forum Langage
    Réponses: 8
    Dernier message: 05/01/2007, 19h55

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