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 :

copie table identique


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 19
    Points : 13
    Points
    13
    Par défaut copie table identique
    bonjour
    j'ai deux tables dont la structure est identique mais dont le nom est diffèrent
    je voudrais inséré toutes les lignes de la table1 dans la table2 avec une coédition.
    sachant que j'ai des lignes identique dans les deux table
    voici ma requête



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    insert into table1 (champs1,  champs2)
                       (select  champs1,champs2
                         from table2 
                          where cond1='toto')
    j'obtiens le message d'erreur suivant
    ORA-00001 unique constraint (string.string) violated
    j'utilise oracle10g
    merci d'avance

  2. #2
    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
    Utilisez Merge.

  3. #3
    Membre habitué
    Inscrit en
    Mai 2010
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 107
    Points : 132
    Points
    132
    Par défaut
    Hello,

    Voici un petit scénario utilisant la commande Merge. Exécute les commandes une à une et tu pourras facilement comprendre le mode de fonctionnement de cette commande.

    Si tu as des questions, n'hésite pas à me contacter.

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
     
    CREATE TABLE PRODUCTS#1 (
        IDPRODUCT NUMBER(10,0) CONSTRAINT PRODUCTS#1_PK PRIMARY KEY,
        NAME      VARCHAR2(255) NOT NULL ENABLE,
        PRICE     NUMBER(12,2) DEFAULT 0
    );
     
     
    CREATE TABLE PRODUCTS#2
     (
        IDPRODUCT NUMBER(10,0) CONSTRAINT PRODUCTS#2_PK PRIMARY KEY,
        NAME      VARCHAR2(255) NOT NULL ENABLE,
        PRICE     NUMBER(12,2) DEFAULT 0
    );
     
    insert into PRODUCTS#1 values(1, 'Bouteille de Coca Cola 1.5 litre', 1.85);
    insert into PRODUCTS#1 values(2, q'[Bouteille d'eau Spa Reine]', 1.55);
    insert into PRODUCTS#1 values(3, 'Produit de vaisselle Ajax', 2.43);
    insert into PRODUCTS#1 values(4, 'Montre en Or Gucci', 20366.18);
    insert into PRODUCTS#1 values(5, 'Gourmette Plaqué Or Armani', 20366.18);
    insert into PRODUCTS#1 values(6, q'[Boucle d'oreilles en diamant]', 2366.18);
     
     
    insert into PRODUCTS#2 values(2, q'[Bouteille d'eau Spa Reine]', 1.55);
    insert into PRODUCTS#2 values(3, 'Produit de vaisselle Ajax', 2.43);
    insert into PRODUCTS#2 values(5, 'Gourmette Plaqué Or Armani', 20366.18);
     
    SAVEPOINT S1; 
     
    SELECT * FROM PRODUCTS#1 
    MINUS 
    SELECT * FROM PRODUCTS#2;
     
     
    /* merge te permet de n'insérer que les enregistrements manquants. */
    -- ajout des ligne de p1 dans p2 si la clé primaire est pas trouvée.
    merge into products#2 p2 
     using products#1 p1 on (p2.idproduct = p1.idproduct)
     when not matched then
         insert(idproduct, name, price) values (p1.idproduct, p1.name, p1.price);
     
    select * from products#2;
     
    ROLLBACK WORK TO S1;
     
    update products#1 
      set price = price * 1.1; -- ajout de 10% à chaque prix...
     
    -- ajout des ligne de p1 dans p2 si la clé primaire est pas trouvée.
    -- si la clé primaire est trouvée, mettre à jour le prix de la table p2 avec
    -- le prix de la table p1
    merge into products#2 p2 
     using products#1 p1 on (p2.idproduct = p1.idproduct)
     when not matched then
         insert(idproduct, name, price) values (p1.idproduct, p1.name, p1.price)
     when matched then
         update set p2.price = p1.price;
     
    ROLLBACK; 
     
    drop table products#2;
    drop table products#1;
    Bien à toi,

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/01/2007, 21h51
  2. [Conception] Déplacer un enregistrement vers une table identique
    Par Romalafrite dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 07/09/2006, 10h55
  3. Réponses: 3
    Dernier message: 22/07/2006, 12h26
  4. pb copie table par INSERT
    Par forzaxelah dans le forum Bases de données
    Réponses: 23
    Dernier message: 20/07/2006, 09h45
  5. Requête faisant appel à 2 tables identiques
    Par Meduse dans le forum Access
    Réponses: 4
    Dernier message: 02/02/2006, 13h00

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