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 :

Insertion dans trois tables


Sujet :

SQL Oracle

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 24
    Par défaut Insertion dans trois tables
    Bonjour a toutes et a tous ,
    j'essaye de faire une requete d'insertion dans trois table T1(id1, champ1) T2(id2, champ2), T3(id3, champ3, id1, id2) les id1, id2 sont des clés etrangeres
    mais je ne sais pas trop comment faire, j'ai fait
    insert into T1(id1, champ1) values('id1', 'champ1');
    insert into T2(id2, champ2) values('id2', 'champ2');
    insert into T3(id3, champ3, id1, id2) values('id3','champ3', 'id1', 'id2' );
    mais ca ne marche pas !!!
    j'ai essayé de passer des valeurs mais j'ai eu une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    violation de contrainte d'intégrité (T3_FK) - clé parent introuvable
    si vous avez une idée comment je dois faire je vous serai reconnaissante,
    merci.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Vous avez peut-être une erreur à l'insertion dans T1 que vous n'avez pas vue.

    Ou peut-être avez-vous mal déclaré "T3_FK" (sur id3 au lieu de id1 par exemple) ?

    Ou peut-être encore vous êtes en rollback automatique ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 24
    Par défaut
    mais est ce que de point de vu syntaxe c'est juste ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 24
    Par défaut
    quand j'ai verifiée , l'insertion se fait uniquement dans la table T1 !!

  5. #5
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    Salut,

    Le problème est au niveau de la table 2.

    Peux tu nous poster le script de création de tes tables ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 24
    Par défaut
    le script de la TABLE1
    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
     
     
    CREATE TABLE  "TABLE1" 
       (	"ID1" NUMBER NOT NULL ENABLE, 
    	"CHAMP1" VARCHAR2(4000), 
    	 CONSTRAINT "TABLE1_PK" PRIMARY KEY ("ID1") ENABLE
       )
    /
     
    CREATE OR REPLACE TRIGGER  "BI_TABLE1" 
      before insert on "TABLE1"               
      for each row  
    begin   
      if :NEW."ID1" is null then 
        select "TABLE1_SEQ".nextval into :NEW."ID1" from dual; 
      end if; 
    end; 
     
    /
    ALTER TRIGGER  "BI_TABLE1" ENABLE
    /
    pour la TABLE2

    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
     
     
    CREATE TABLE  "TABLE2" 
       (	"ID2" NUMBER NOT NULL ENABLE, 
    	"CHAMP2" VARCHAR2(4000), 
    	 CONSTRAINT "TABLE2_PK" PRIMARY KEY ("ID2") ENABLE
       )
    /
     
    CREATE OR REPLACE TRIGGER  "BI_TABLE2" 
      before insert on "TABLE2"               
      for each row  
    begin   
      if :NEW."ID2" is null then 
        select "TABLE2_SEQ".nextval into :NEW."ID2" from dual; 
      end if; 
    end; 
     
    /
    ALTER TRIGGER  "BI_TABLE2" ENABLE
    /
    pour la TABLE3:

    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
     
    CREATE TABLE  "TABLE3" 
       (	"ID3" NUMBER NOT NULL ENABLE, 
    	"DATE" DATE, 
    	"NB" NUMBER, 
    	"ID1" NUMBER, 
    	"ID2" NUMBER, 
    	 CONSTRAINT "TABLE3_PK" PRIMARY KEY ("ID3") ENABLE
       )
    /
    ALTER TABLE  "TABLE3" ADD CONSTRAINT "TABLE3_FK" FOREIGN KEY ("ID1")
    	  REFERENCES  "TABLE1" ("ID1") ON DELETE CASCADE ENABLE
    /
    ALTER TABLE  "TABLE3" ADD CONSTRAINT "TABLE3_FK2" FOREIGN KEY ("ID2")
    	  REFERENCES  "TABLE2" ("ID2") ON DELETE CASCADE ENABLE
    /
     
    CREATE OR REPLACE TRIGGER  "BI_TABLE3" 
      before insert on "TABLE3"               
      for each row  
    begin   
      if :NEW."ID3" is null then 
        select "TABLE3_SEQ".nextval into :NEW."ID3" from dual; 
      end if; 
    end; 
     
    /
    ALTER TRIGGER  "BI_TABLE3" ENABLE
    /

    je precise que les tables sont crées dans APEX.

  7. #7
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    Sincèrement je n'ai jamais travaillé avec apex.

    Essaies de vérifier les séquences :TABLE1_SEQ,TABLE2_SEQ,TABLE3_SEQ

  8. #8
    Expert confirmé 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
    Par défaut
    Il te manque les séquences
    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
    CREATE TABLE  "TABLE1" 
       (	"ID1" NUMBER NOT NULL ENABLE, 
    	"CHAMP1" VARCHAR2(4000), 
    	 CONSTRAINT "TABLE1_PK" PRIMARY KEY ("ID1") ENABLE
       )
    /
    create sequence TABLE1_SEQ 
    / 
    
    CREATE OR REPLACE TRIGGER  "BI_TABLE1" 
      before INSERT ON "TABLE1"               
      FOR each row  
    begin   
      IF :NEW."ID1" IS NULL then 
        SELECT "TABLE1_SEQ".NEXTVAL INTO :NEW."ID1" FROM dual; 
      end IF; 
    end; 
     
    /
    ALTER TRIGGER  "BI_TABLE1" ENABLE
    /
    PS. Apex dans ce contexte égal sqlplus

  9. #9
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    Citation Envoyé par mnitu Voir le message
    PS. Apex dans ce contexte égal sqlplus
    Merci mnitu pour l'information.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 24
    Par défaut
    je viens de verifier , les séquences existent bien ! donc c'est pas ça
    Images attachées Images attachées  

  11. #11
    Expert confirmé 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
    Par défaut
    Si les séquences sont bien dans ta base il n’était pas dans ton script.
    L’erreur te dit que il ne trouve pas la valeur de la clé parent dans la table T1.
    Peux tu ajouter les requêtes que tu exécute ?

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 77
    Par défaut
    Citation Envoyé par felosa Voir le message
    quand j'ai verifiée , l'insertion se fait uniquement dans la table T1 !!
    As-tu un message d'erreur lorsque tu essayes d'insérer dans la table T2?

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 24
    Par défaut
    voila mon test d'insertion:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    BEGIN
       insert into TABLE3(Id3, DATE, NB, ID1, ID2) values('2' , :P8_DATE, :P8_NB, '1', '1' );
     insert into TABLE1(ID1, CHAMP1) values('1', :P8_CHAMP1);
    insert into TABLE2(ID2, CHAMP2) values
    ('1', :P8_CHAMP2); 
     EXCEPTION
       When OTHERS then
       htp.p(SQLCODE || ' : ' ||SQLERRM); 
    END;

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 24
    Par défaut
    voila le message d'erreur que j'obtiens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    -2291 : ORA-02291: violation de contrainte d'intégrité (TABLE3_FK1) - clé parent introuvable

  15. #15
    Membre éprouvé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2007
    Messages : 126
    Par défaut
    Citation Envoyé par felosa Voir le message
    voila mon test d'insertion:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    BEGIN
       insert into TABLE3(Id3, DATE, NB, ID1, ID2) values('2' , :P8_DATE, :P8_NB, '1', '1' );
     insert into TABLE1(ID1, CHAMP1) values('1', :P8_CHAMP1);
    insert into TABLE2(ID2, CHAMP2) values
    ('1', :P8_CHAMP2); 
     EXCEPTION
       When OTHERS then
       htp.p(SQLCODE || ' : ' ||SQLERRM); 
    END;
    l'insert dans la table3 doit se faire en dernier pour pouvoir valider les contraintes, sinon inhiber les contraintes le temps de la transaction, mais ce n'est pas vraiment nécessaire dans ce cas là

Discussions similaires

  1. [ZEOSLIB] Problème Insertion dans une table
    Par moscovisci dans le forum Bases de données
    Réponses: 1
    Dernier message: 09/06/2005, 12h05
  2. [interbase6]probleme d'insertion dans une table
    Par macadam314 dans le forum Bases de données
    Réponses: 10
    Dernier message: 22/02/2005, 14h21
  3. [Sybase] Temps d'une insertion dans une table
    Par vsavoir dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 14/02/2005, 10h04
  4. Extraction d'un .txt et Insertion dans une table
    Par PoPmiSiR dans le forum Access
    Réponses: 8
    Dernier message: 28/10/2004, 19h13
  5. Détection insertion dans une Table
    Par abelman dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 06/07/2004, 14h24

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