Définition d’un déclencheur
Bonjour,
La définition d’un déclencheur:
Un déclencheur de base de données est un ensemble d’instructions qui s’exécutent lorsque le contenu d’une table est modifié par l’intermédiaire d’une instruction INSERT, UPDATE ou DELETE.
donc je pense, on ne peut pas définir un déclencheur au niveau d'un package
Salutations :),
khalid
Citation:
Envoyé par
ldiaz
Bonjour a tous
je voulais savoir s'il est possible de creer un trigger qui se declenche lorsque un package PL/SQL est crée
Code:
CREATE [OR REPLACE] PACKAGE package_name
le corps du trigger serait de donner un grant a l'utilisateur qui se servira du package et aussi de creer un synomyme du package..Tout ceci est faisable?
J'ai jamais ecrit un trigger donc je me lance avec ce super pas beau pseudo code:
Code:
1 2 3 4 5 6 7 8 9 10
| CREATE TRIGGER grant_user_plus_synomyme
AFTER
la je sais pas comment lui dire:
CREATE PACKAGE avec son nom?
BEGIN
grant lePrivilege a l'utilisateur;
create synomyme;
END IF;
END; |
Voila c'est l'idée
qq'un sait faire ca?
D'avance merci
trigger sur package pl/sql
re moi
j'ai vu ceci en cherchant un peu:
Code:
1 2 3
| 'execute immediate "grant select on ' ||
ora_dict_obj_name ||
' to scott";' |
ca voudrais dire que implicitement lorsque le trigger se declenche, la variable
ora_dict_obj_name contient le nom du package? tiens je vais tester avec un output juste pour voir.
trigger sur pacakge pl/sql
Yooo
ca marche
avec ce code:
Code:
1 2 3 4 5
| CREATE TRIGGER audit_db_object AFTER CREATE
ON MONSCHEMA.SCHEMA
BEGIN
dbms_output.put_line(ora_dict_obj_name);
END; |
lorsque je cre un package PL/SQL avec create or replace, ca m'a imprimé le nom du package que j'ai crée...Donc si dans le code je met
Code:
grant execute on ora_dict_obj_name to user;
ca devrait suffir n'est ce pas?
trigger su package pl/sql
J'ai essayé avec ca, mais j'ai une erreur,,,peu etre qqu'un peu me guider:
Code:
1 2 3 4 5
| CREATE TRIGGER TRIGGER_GRANT AFTER CREATE
ON MONSCHEMA.SCHEMA
BEGIN
'execute immediate "grant execute on ' ||ora_dict_obj_name ||' to user";';
END; |
L'erreur est:
Code:
1 2 3
| 09:58:17 Error: 2/44 PLS-00103: Encountered the symbol "|" when expecting one of the following:
:= . ( @ % ;
3/4 PLS-00103: Encountered the symbol "END" |
trigger sur package pl/sql
Bonjour
ok alors maintenant j'ai ceci:
Code:
1 2 3 4 5 6 7 8 9
| CREATE OR REPLACE TRIGGER TRI_RHUTST_GRANT AFTER CREATE
ON RHUTST.SCHEMA
DECLARE
LC$Requete VARCHAR2(256) ;
BEGIN
LC$Requete:= 'GRANT EXECUTE ON '||ora_dict_obj_name||' TO rhutst';
EXECUTE IMMEDIATE LC$Requete;
END;
/ |
Ce trigger se compil bien sans erreur.
Mais lorsque je cré un package pl quelquonque sur la base j'ai cette erreur:
Code:
1 2 3
| ORA-00604: error occurred at recursive SQL level 1
ORA-30511: invalid DDL operation in system triggers
ORA-06512: at line 5 |
L'erreur decrite pas metalink:
Code:
1 2 3 4 5
| Cause: An attempt was made to perform an invalid DDL operation in a system
trigger. Most DDL operations currently are not supported in system
triggers. The only currently supported DDL operations are table
operations and ALTER?COMPILE operations.
Action: Remove invalid DDL operations in system triggers. |
Ca veut dire que le package en lui meme colle pas? serait ce a cause du REPLACE?
Voici le debut du code du package:
Code:
CREATE OR REPLACE PACKAGE Pkg_Rhuacoaccion AS
grant impossible dans trigger
Mmmm c'est dommage ca.
Et appeler une procedure dans un trigger c'est possible? Une procedure qui ferait un grant par exemple?