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

PL/SQL Oracle Discussion :

Trigger d'insertion dans une table parente


Sujet :

PL/SQL Oracle

  1. #1
    Membre habitué Avatar de Nadinette
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    264
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 264
    Points : 144
    Points
    144
    Par défaut Trigger d'insertion dans une table parente
    Salut,

    J'aimerais de l'aide pour créer un trigger dans une pour qu'un enregistrement soit créé dans une table dont dépend la table dans laquelle j'insère et affecter le nouvel Id de la table parente comme Id de la table dans laquelle j'insère.

    En gros, j'ai une table A qui n'a qu'un champ ID

    Trois table en A1, A2, A3 dont la clef primaire est une clef étrangère vers A

    Le trigger qui ajoute l'élément dans la séquence de A est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    create or replace trigger 
    	TRG_SEQ_T_SEC_ENTITY     
    before insert on "T_SEC_ENTITY"    
    for each row begin     
    	if inserting then       
    		if :NEW."ID" is null then          
    			select SEQ_T_SEC_ENTITY.nextval into :NEW."ID" from dual;       
    		end if;    
    	end if; 
    end;
    A1, A2 et A3 sont respectivement
    T_SEQ_USER
    T_SEQ_ROLE
    T_SEQ_SALESTEAM

    J'aimerais arriver à un truc du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    create or replace trigger 
    	TRG_SEQ_T_SEQ_USER     
    before insert on "T_SEQ_USER"    
    for each row begin     
    	if inserting then       
                    -- DISABLE PARENT INSERT TRIGGER
                    -- NSN <= CREATE NEW SEQUENCE NUMBER 
                    -- INSERT NEW ROW IN SEQ_T_SEC_ENTITY (NSN)
                    -- INSERT NEW ROW IN SEQ_T_SEC_ROLE (NSN)
                    -- RE ENABLE PARENT INSERT TRIGGER
    	end if; 
    end;
    Je sais pas si j'ai été très claire, il semble que ce soit un coup classique mais je n'ai pas bien compris l'exemple suivant de la page : http://docs.oracle.com/cd/A87860_01/...9/adg13trg.htm

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CREATE OR REPLACE TRIGGER Dept_emplist_tr
       INSTEAD OF INSERT ON NESTED TABLE Emplist OF Dept_view
       REFERENCING NEW AS Employee
          PARENT AS Department
       FOR EACH ROW
    BEGIN
    -- The insert on the nested table is translated to an insert on the base table:
       INSERT INTO Emp_tab VALUES (
          :Employee.Empno, :Employee.Empname,:Employee.Salary, :Department.Deptno);
    END;
    Quelqu'un pourrait-il m'aider ?

    Mici

  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
    Je sais pas si j'ai été très claire...
    Je n'ai rien compris.

  3. #3
    Membre habitué Avatar de Nadinette
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    264
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 264
    Points : 144
    Points
    144
    Par défaut
    Ben entre temps j'ai trouvé...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    CREATE OR REPLACE TRIGGER TRG_T_SEC_SALESTEAM_BI 
    before insert on T_SEC_SALESTEAM
    REFERENCING NEW as New OLD as Old
    FOR EACH ROW 
    DECLARE
      newId NUMBER(10,0);
      BEGIN
          SELECT SEQ_T_SEC_ENTITY.NEXTVAL INTO newId FROM dual;
          INSERT INTO T_SEC_ENTITY VALUES (newId);
          SELECT newId INTO :NEW."ID" FROM dual;
      END;
    Merci quand même pour l'effort de compréhension

  4. #4
    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
    Vous voulez dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE OR REPLACE TRIGGER TRG_T_SEC_SALESTEAM_BI 
    before INSERT ON T_SEC_SALESTEAM
    REFERENCING NEW AS New OLD AS Old
    FOR EACH ROW 
    DECLARE
      BEGIN
          SELECT SEQ_T_SEC_ENTITY.NEXTVAL INTO :NEW."ID" FROM dual;
          INSERT INTO T_SEC_ENTITY VALUES (:NEW."ID");
      END;

  5. #5
    Membre habitué Avatar de Nadinette
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    264
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 264
    Points : 144
    Points
    144
    Par défaut
    A priori, ça à l'air pareil à une ligne près...
    Je vais tester...
    Merci pour l'Add

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [11g] Empêcher un insert dans une table par un Trigger
    Par cmako dans le forum PL/SQL
    Réponses: 19
    Dernier message: 16/10/2013, 15h42
  2. Trigger insert dans une table
    Par dhiaeddine2012 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 13/03/2012, 12h55
  3. [base 9i] trigger pour insert dans une table identique
    Par gaultier dans le forum Oracle
    Réponses: 3
    Dernier message: 18/01/2012, 11h07
  4. Trigger d'insertion dans une nouvelle table
    Par Marty000 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 24/10/2006, 17h24
  5. Réponses: 9
    Dernier message: 20/10/2006, 14h32

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