Précédent   Forum des professionnels en informatique > 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 Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/10/2011, 13h17   #1
Invité de passage
 
Inscription : septembre 2011
Messages : 11
Détails du profil
Informations forums :
Inscription : septembre 2011
Messages : 11
Points : 2
Points : 2
Par défaut Problème de déclenchement d'un trigger sous oracle

Bonjour à tous !
Je gère une base de données sous oracle, et je dois créer un déclencheur. J'ai décidé de le faire se déclencher lorsqu'on met à jour les données de la table Employe(IdPersonne,nom,prenom,fonction,salaire,null,null) ( null et null sont des identifiants d'autres tables ).

J'ai donc le code suivant :

Code :
1
2
3
4
5
6
7
8
9
CREATE OR REPLACE TRIGGER Declen_avtUpdate_Employe
BEFORE UPDATE OR INSERT ON Employe
FOR EACH ROW
DECLARE
sal_diff number;
BEGIN
sal_diff := :new.salaire - :old.salaire;
DBMS_OUTPUT.PUT_LINE('Employé');
END;
Il est censé calculé la différence entre les deux salaires, et afficher Employé. Le problème, c'est qu'en faisant :

Code :
INSERT INTO Employe VALUES(1,'dupont',Type_prenoms('jean', 'Emile','Bernard'),'patron',5000,NULL,NULL);
puis

Code :
1
2
3
UPDATE Employe
SET Employe.salaire = 2000
WHERE Employe.IdPersonne = 1;
puis commit;

Le déclencheur ne se lance pas, et n'affiche pas Employe.
Je l'ai déja activé par :

Code :
ALTER TRIGGER Declen_AvtUpdate_Employe ENABLE;
Pouvez vous m'aider s'il vous plait ?
Merci d'avance !
R.
radious est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/10/2011, 14h47   #2
Invité de passage
 
Inscription : septembre 2011
Messages : 11
Détails du profil
Informations forums :
Inscription : septembre 2011
Messages : 11
Points : 2
Points : 2
Si vous voulez tester :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CREATE OR REPLACE TYPE Type_personne AS OBJECT(
IdPersonne NUMBER(3),
nom VARCHAR(20),
prenom Type_prenoms)
NOT FINAL;
/
 
CREATE OR REPLACE TYPE Type_Employe UNDER Type_Personne (
fonction  VARCHAR(20),
salaire NUMBER(10),
numHangarConteneur     NUMBER(3),
numQuaiBateau    NUMBER(3))
INSTANTIABLE
FINAL;
/
 
CREATE TABLE Employe OF Type_Employe (
CONSTRAINT Existe_id IdPersonne NOT NULL,
CONSTRAINT Existe_nom nom  NOT NULL,
CONSTRAINT Existe_prenom prenom  NOT NULL,
CONSTRAINT Existe_fonction fonction  NOT NULL,
CONSTRAINT Existe_salaire salaire NOT NULL,
CONSTRAINT ClePrimaireEmploye PRIMARY KEY ( IdPersonne ) );
radious est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/10/2011, 14h54   #3
Membre éprouvé
 
Avatar de xdescamp
 
Homme Xavier Descamps
Inscription : octobre 2008
Messages : 297
Détails du profil
Informations personnelles :
Nom : Homme Xavier Descamps
Âge : 36
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2008
Messages : 297
Points : 422
Points : 422
Envoyer un message via Skype™ à xdescamp
Ce n'est pas juste un problème d'affichage non activé ?
Code sql :
SET Serveroutput ON;
xdescamp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/10/2011, 16h40   #4
Invité de passage
 
Inscription : septembre 2011
Messages : 11
Détails du profil
Informations forums :
Inscription : septembre 2011
Messages : 11
Points : 2
Points : 2
Non, je viens d'essayer, ca ne marche pas. Merci quand même
radious est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2011, 10h18   #5
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
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 : 3 311
Points : 5 813
Points : 5 813
Citation:
Envoyé par radious Voir le message
Si vous voulez tester :
J'ai voulu tester mais ça ne marche pas
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
Connected TO Oracle DATABASE 10g Enterprise Edition Release 10.2.0.4.0 
Connected AS mni
 
SQL> 
SQL> CREATE OR REPLACE TYPE Type_personne AS OBJECT(
  2  IdPersonne NUMBER(3),
  3  nom VARCHAR(20),
  4  prenom Type_prenoms)
  5  NOT FINAL;
  6  /
 
Warning: Type created WITH compilation errors
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2011, 16h41   #6
Invité de passage
 
Inscription : septembre 2011
Messages : 11
Détails du profil
Informations forums :
Inscription : septembre 2011
Messages : 11
Points : 2
Points : 2
Oui, j'ai oublié de vous donner le code de création du Type_Prenoms :

Code :
1
2
 CREATE OR REPLACE TYPE Type_prenoms AS VARRAY(5) OF VARCHAR(30);
/
radious est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 14h43   #7
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
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 : 3 311
Points : 5 813
Points : 5 813
Chez moi ça marche
Code :
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
64
65
66
67
68
69
70
71
72
 
Connected TO Oracle DATABASE 10g Enterprise Edition Release 10.2.0.4.0 
Connected AS mni
 
SQL> 
SQL> CREATE OR REPLACE TYPE Type_prenoms AS VARRAY(5) OF VARCHAR(30);
  2  /
 
Type created
SQL> CREATE OR REPLACE TYPE Type_personne AS OBJECT(
  2  IdPersonne NUMBER(3),
  3  nom VARCHAR(20),
  4  prenom Type_prenoms)
  5  NOT FINAL;
  6  /
 
Type created
SQL> CREATE OR REPLACE TYPE Type_Employe UNDER Type_Personne (
  2  fonction  VARCHAR(20),
  3  salaire NUMBER(10),
  4  numHangarConteneur     NUMBER(3),
  5  numQuaiBateau    NUMBER(3))
  6  INSTANTIABLE
  7  FINAL;
  8  /
 
Type created
SQL> CREATE TABLE Employe OF Type_Employe (
  2  CONSTRAINT Existe_id IdPersonne NOT NULL,
  3  CONSTRAINT Existe_nom nom  NOT NULL,
  4  CONSTRAINT Existe_prenom prenom  NOT NULL,
  5  CONSTRAINT Existe_fonction fonction  NOT NULL,
  6  CONSTRAINT Existe_salaire salaire NOT NULL,
  7  CONSTRAINT ClePrimaireEmploye PRIMARY KEY ( IdPersonne ) )
  8  /
 
TABLE created
 
SQL> 
SQL> CREATE OR REPLACE TRIGGER Declen_avtUpdate_Employe
  2  BEFORE UPDATE OR INSERT ON Employe
  3  FOR EACH ROW
  4  DECLARE
  5  sal_diff number;
  6  BEGIN
  7  sal_diff := :new.salaire - :old.salaire;
  8  DBMS_OUTPUT.PUT_LINE('Employé');
  9  END;
 10  /
 
TRIGGER created
 
SQL> SHOW err
No errors FOR TRIGGER MNI.DECLEN_AVTUPDATE_EMPLOYE
 
SQL> SET serveroutput ON
SQL> INSERT INTO Employe VALUES(1,'dupont',Type_prenoms('jean', 'Emile','Bernard'),'patron',5000,NULL,NULL);
 
Employé
 
1 row inserted
 
SQL> 
SQL> UPDATE Employe
  2  SET Employe.salaire = 2000
  3  WHERE Employe.IdPersonne = 1;
 
Employé
 
1 row updated
 
SQL>
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2011, 16h20   #8
Invité de passage
 
Inscription : septembre 2011
Messages : 11
Détails du profil
Informations forums :
Inscription : septembre 2011
Messages : 11
Points : 2
Points : 2
En effet, j'avais oublié le set serverOutput on.

Merci beaucoup et bonne soirée !
R.
radious est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h48.


 
 
 
 
Partenaires

Hébergement Web