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> | 
Partager