Précédent   Forum du club des développeurs et IT Pro > 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
 
Outils de la discussion
Publicité
'
Vieux 28/11/2012, 12h34   #1
Nadinette
Membre du Club
 
Avatar de Nadinette
 
Femme Nadine M
Développeur Web
Inscription : octobre 2012
Messages : 88
Détails du profil
Informations personnelles :
Nom : Femme Nadine M
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 : 88
Points : 59
Points : 59
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 :
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 :
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 :
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
Nadinette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2012, 14h24   #2
mnitu
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 4 104
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 4 104
Points : 7 994
Points : 7 994
Citation:
Je sais pas si j'ai été très claire...
Je n'ai rien compris.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2012, 15h10   #3
Nadinette
Membre du Club
 
Avatar de Nadinette
 
Femme Nadine M
Développeur Web
Inscription : octobre 2012
Messages : 88
Détails du profil
Informations personnelles :
Nom : Femme Nadine M
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 : 88
Points : 59
Points : 59
Ben entre temps j'ai trouvé...

Code :
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
Nadinette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2012, 16h03   #4
mnitu
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 4 104
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 4 104
Points : 7 994
Points : 7 994
Vous voulez dire
Code :
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;
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2012, 17h48   #5
Nadinette
Membre du Club
 
Avatar de Nadinette
 
Femme Nadine M
Développeur Web
Inscription : octobre 2012
Messages : 88
Détails du profil
Informations personnelles :
Nom : Femme Nadine M
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 : 88
Points : 59
Points : 59
A priori, ça à l'air pareil à une ligne près...
Je vais tester...
Merci pour l'Add
Nadinette est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 20h16.


 
 
 
 
Partenaires

Hébergement Web