Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/09/2008, 14h36   #1
Invité de passage
 
Inscription : septembre 2008
Messages : 3
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 3
Points : 0
Points : 0
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
Ndrmar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2008, 01h09   #2
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 459
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 459
Points : 4 226
Points : 4 226
Code :
1
2
3
4
5
UPDATE ...
IF SQL%ROWCOUNT=0
THEN
 INSERT ..
END IF;
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2008, 08h21   #3
Membre confirmé
 
Inscription : août 2005
Messages : 270
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 270
Points : 294
Points : 294
Citation:
Envoyé par McM Voir le message
Code :
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 :
1
2
INSERT .... WHERE NOT EXISTS...;
UPDATE ... WHERE EXISTS...;
jmguiche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2008, 08h58   #4
Membre expérimenté

 
Inscription : décembre 2003
Messages : 480
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 480
Points : 539
Points : 539
ce serait peut être intéressant de connaître le statement en question et la release de ta db cible
__________________

*** OPN Exadata Specialist ***
*** OCE Performance Tuning 11g ***
*** OCE Rac 10g ***
*** OCP DBA 9i-10g-11g ***
Marc Musette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2008, 14h50   #5
Invité de passage
 
Inscription : septembre 2008
Messages : 3
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 3
Points : 0
Points : 0
Voici le statement en question

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
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)
;
Ndrmar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2008, 16h12   #6
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 320
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 320
Points : 5 839
Points : 5 839
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 :
1
2
INSERT .... WHERE NOT EXISTS...;
UPDATE ... WHERE EXISTS...;
Hm!
Code :
1
2
 
INSERT WHERE NOT EXISTS
ajoute les enregistrements qui n’existent pas
Code :
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.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2008, 12h24   #7
Invité de passage
 
Inscription : septembre 2008
Messages : 3
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 3
Points : 0
Points : 0
Merci beaucoup pour l'aide, je vais utiliser les conseils que vous m'avez distillé
Ndrmar est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h30.


 
 
 
 
Partenaires

Hébergement Web