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

Oracle Discussion :

Recupérer les données d'une d'une relation


Sujet :

Oracle

  1. #1
    Membre du Club
    Inscrit en
    Août 2002
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 65
    Points : 64
    Points
    64
    Par défaut Recupérer les données d'une d'une relation
    Salut, je viens poser un problème qui me tracasse. Etant données deux tables T1 et T2, je voudrais copier les données de la table T1 vers la table T2 chaque fois qu'il y a insertion de données dans la T1. Quoi de plus facile que de créer un Trigger du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     CREATE TRIGGER V_trigger
    AFTER INSERT
    ON T1 
    REFERENCING NEW AS NEW OLD AS OLD
    FOR EACH ROW
    begin
       //Procedure de copie
    end;
    Mon problème est qu'étant données deux autres tables TT1 et TT2 respectivement des tables détails ayant pour maitre T1 et T2. Donc je veux copier T1 vers T2 et TT1 vers TT2 après chaque insertion d'un enregistrement maitre dans T1 et l'enregistrement de tous les détails dans TT1.
    Merci
    Les vrais informaticiens n'ont pas d'attaché-case ; leur tête suffit à transporter leurs connaissances.

  2. #2
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Cela ne sert à rien de noter [oracle] dans le titre puisque vous êtes sur le forum Oracle.
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  3. #3
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Pourquoi ne pas créer un trigger avec procédure de copie sur TT1 aussi ?
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 68
    Points : 78
    Points
    78
    Par défaut
    Citation Envoyé par nuke_y
    Pourquoi ne pas créer un trigger avec procédure de copie sur TT1 aussi ?
    En effet, je ne vois pas où est le problème :
    un trigger se déclenche sur l'insert dans T1 => copie de T2
    un autre trigger se déclenche sur l'insert dans TT1 => copie de TT2

    Pour pouvoir insérer une ligne dans TT1 il faut auparavant qu'un enregistrement "maitre" ait été inséré dans T1, ce qui a déclenché le premier trigger et inséré également une ligne dans T2. Par conséquent, au moment , du déclenchement du deuxième trigger (sur l'insert dans TT1), l'enregistrement maitre existera dans T2. ( je ne suis pas sûr que ce soit très clair ...)

    La seule difficulté est de bien vérifier que toutes les lignes de T1 insérées avant la mise en place du trigger sont bien reportées dans T2.

  5. #5
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Exactement et c'est ce qui me fait un peu peur. Il suffit que l'insertion ne se fasse pas ligne à ligne dans T1 ou que l'insertion des détails dans TT1 se fasse DEJA avec un trigger sur T1...

    Comment est remplie la table TT1 ?
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  6. #6
    Membre du Club
    Inscrit en
    Août 2002
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 65
    Points : 64
    Points
    64
    Par défaut
    La table TT1 est remplie ligne par ligne. Ce sont des enrgeistrement details dont les maitre est un enregistrement dans la table T1. Le probleme est que tant que le maitre n'existe pas les détails ne peuvent pas exister. Et des que que le maitre existe le trigger de copie se déclenche pour faire la copie alors que le prémier détail n'est pas encore là.
    Ce que je veux savoir c'est est ce qu'il y a des astuces pour resoudre le problème.
    Les vrais informaticiens n'ont pas d'attaché-case ; leur tête suffit à transporter leurs connaissances.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 68
    Points : 78
    Points
    78
    Par défaut
    Citation Envoyé par Tsimplice
    Et des que que le maitre existe le trigger de copie se déclenche pour faire la copie alors que le prémier détail n'est pas encore là.
    Est-ce vraiment génant ? Au moment de l insertion dans la table T1, il existe bien un enregistrement maitre dans T1 sans fils dans TT1.

    Si le besoin fonctionnel est vraimet d attendre qu il y ait au moins un fils dans TT1 pour reporter les enregistrements dans T2 et TT2, alors il faut faire un trigger uniquement sur TT1 qui fait tout le boulot (vérifier dans T2, éventuellement select dans T1 + insert dans T2 puis insert dans TT2).

  8. #8
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Je ne comprend pas...

    SI il faut que l'enregistrement existe dans T1 pour remplir TT1 et SI un enregistrement créé dans T1 donne immédiatement un enregistrement dans T2, alors le même type de trigger de copie sur T1 vers T2 et TT1 vers TT2 devrait suffire.
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  9. #9
    Membre du Club
    Inscrit en
    Août 2002
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 65
    Points : 64
    Points
    64
    Par défaut
    Avec deux trigger, chaque sur chaque table ca marche bien sûr. Mais ce que je voudrais c'est un seul pogramme.
    Les vrais informaticiens n'ont pas d'attaché-case ; leur tête suffit à transporter leurs connaissances.

  10. #10
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut
    Citation Envoyé par Tsimplice
    Avec deux trigger, chaque sur chaque table ca marche bien sûr. Mais ce que je voudrais c'est un seul pogramme.
    alors tu fais un triggers sur TT1 (détails de T1), qui copie les données de T1 dans T2 et TT1 dans TT2 (mais c'est pas top, il faut a chaque ligne tester si le parents est présent si non il faut l'insérer)
    exemple
    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
     
    CREATE TRIGGER V_trigger 
    AFTER INSERT 
    ON TT1 
    REFERENCING NEW AS NEW OLD AS OLD 
    FOR EACH ROW 
    begin 
       --insertion de la ligne parents de TT1 sans faire de doublons'
       insert into T2
       select * from T1 
       where t1.cle = :NEW.cle 
       and not exists (select null from T2 where T2.cle = TT1.cle);
      --insertion de la ligne TT1 dans TT2'
      insert into TT2(champs1, champs2...)
     values (:new.champs1, :new.champs2...);
    end;
    Tiens rien à voir mais si TT1 et TT2 ont exactement la mêm structure peut on faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      --insertion de la ligne TT1 dans TT2'
      insert into TT2 :new

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/01/2010, 14h02
  2. recupérer les données d'une boucle
    Par mfontan dans le forum MATLAB
    Réponses: 18
    Dernier message: 07/01/2008, 13h55
  3. recupérer les données dans une iframe
    Par jamel3000 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/06/2007, 19h49
  4. Recupérer les données d'une chaine
    Par claralavraie dans le forum Langage SQL
    Réponses: 4
    Dernier message: 17/07/2006, 10h34

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