Bonjours
J'ai la table
sur la quelle je veux créer un trigger dynamiquement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 CREATE TABLE matable ( "CODE_POSTAL" CHAR(5 BYTE), "NOM" VARCHAR2(38 BYTE), "INSERT_DATE" DATE, "UPDATE_DATE" DATE )
Dans un 1er temps,
Quand je fais
Code 1
ça marche!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 create or replace TRIGGER UPDATE_matable_TRIGGER BEFORE UPDATE ON matable FOR EACH ROW BEGIN SELECT SYSDATE INTO :new.UPDATE_DATE FROM DUAL; END;
Quand je fais
Code 2
ça marche!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 begin EXECUTE IMMEDIATE 'CREATE OR REPLACE TRIGGER UPDATE_matable_TRIGGER BEFORE UPDATE ON matable FOR EACH ROW BEGIN SELECT SYSDATE INTO :new.UPDATE_DATE FROM DUAL;END;'; end;/
Mais que je met ce code dans une procédure stocké d'un package
et que je fais appel à cette procédure
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 PROCEDURE create_update_trigger(tableName IN VARCHAR2) IS BEGIN EXECUTE IMMEDIATE 'CREATE OR REPLACE TRIGGER UPDATE_' || tableName || '_TRIGGER BEFORE UPDATE ON ' || tableName || ' FOR EACH ROW BEGIN SELECT SYSDATE INTO :new.UPDATE_DATE FROM DUAL; END;'; EXCEPTION WHEN OTHERS THEN RAISE; END create_update_trigger;
on me réponds:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 begin UPDATER.create_update_trigger('matable'); end; /
Code : Sélectionner tout - Visualiser dans une fenêtre à part 01031. 00000 - "insufficient privileges"
Ce que je ne comprend pas c'est pourquoi.
Car j'arrive très bien a créer un trigger sur cette table
que ce soit avec le code 1 ou le code 2;
Mais dès que je veux passé par une procédure stocké,
ça ne marche plus, et ne je vois pas pourquoi le problème viendrais des droits
Car ce sont tous des objets d'un même schéma (MON schéma)
Quelqu'un peut-il me dire où est la faute?
Partager