Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
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 01/08/2011, 17h43   #1
Membre à l'essai
 
Inscription : octobre 2006
Messages : 237
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 237
Points : 21
Points : 21
Par défaut Insert - Update Script

Salut à tous

J'aimerais savoir si il serait mieux de faire un update sur des données plutôt que de les delete avant comme je le fais. Si oui, comment faire le script avec un insert et si les données existent, faire un update

Voici mon script pour le moment

Merci

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
DECLARE
   invalid_column_name          EXCEPTION;
   column_already_exist         EXCEPTION;
   table_does_not_exist         EXCEPTION;
   name_is_already_used         EXCEPTION;
   pub_synonym_not_exist        EXCEPTION;
   table_can_have_only_one_pk   EXCEPTION;
   unique_constraint            EXCEPTION;
   trigger_does_not_exist       EXCEPTION;
   constraint_exist             EXCEPTION;
   PRAGMA EXCEPTION_INIT (invalid_column_name, -904);
   PRAGMA EXCEPTION_INIT (column_already_exist, -1430);
   PRAGMA EXCEPTION_INIT (table_does_not_exist, -942);
   PRAGMA EXCEPTION_INIT (name_is_already_used, -955);
   PRAGMA EXCEPTION_INIT (pub_synonym_not_exist, -1432);
   PRAGMA EXCEPTION_INIT (table_can_have_only_one_pk, -2260);
   PRAGMA EXCEPTION_INIT (unique_constraint, -1);
   PRAGMA EXCEPTION_INIT (trigger_does_not_exist, -4080);
   PRAGMA EXCEPTION_INIT (constraint_exist, -2264);
BEGIN
	--DML010
	BEGIN
		DELETE address_type_definition WHERE address_type_id=1;
		DELETE address_type_definition WHERE address_type_id=2;
		INSERT INTO address_type_definition (address_type_id, description) VALUES (1, 'Physical');
		INSERT INTO address_type_definition (address_type_id, description) VALUES (2, 'Mailing');
 
		COMMIT;
	EXCEPTION
		WHEN unique_constraint THEN NULL;
		WHEN OTHERS THEN
			RAISE_APPLICATION_ERROR(-20101, 'DML010 ERROR SQLCODE = '||SQLCODE||' '||SQLERRM);
	END;
 
END;
/
SHOW ERRORS;
punisher999 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2011, 19h06   #2
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 445
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 445
Points : 7 532
Points : 7 532
Première solution :
un update et un insert
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
UPDATE  address_type_definition
SET     description = 'Physical'
WHERE   address_type_id = 1
    AND description <> 'Physical'
;
INSERT INTO address_type_definition
    (   address_type_id
    ,   description
    ) 
SELECT  1 AS address_type_id
    ,   'Physical' AS description
FROM    DUAL  SRC  
WHERE   NOT EXISTS 
        (   SELECT    1
            FROM      address_type_definition
            WHERE     src.address_type_id = tgt.address_type_id
        )
;
Deuxième solution :
Utiliser la commande MERGE, mais je n'ai pas sa syntaxe sous la main
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2011, 19h14   #3
Membre à l'essai
 
Inscription : octobre 2006
Messages : 237
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 237
Points : 21
Points : 21
Merge je le connais

Merci ;-)
punisher999 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2011, 08h42   #4
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Selon la volumétrie ça peut être plus intéressant tout de même de faire un DELETE et INSERT
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2011, 11h34   #5
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 445
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 445
Points : 7 532
Points : 7 532
... à condition toutefois qu'il n'y ait pas de contraintes derrière
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 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 10h03.


 
 
 
 
Partenaires

Hébergement Web