La capture de Paquet ou de l'intervention/nom de la Fonction à partir d'un déclencheur

J'ai une table (Oracle 11g) sur lequel plusieurs packages/stockées procs exécuter des instructions DML. Je veux capturer le paquet ou le nom de la procédure qui a délivré le DML sur la table à l'aide d'un déclencheur et l'enregistrer dans une table de journalisation.

Par exemple:

Paquet MY_PACK.MY_PROC() questions un insert into... pour la table mytab. Je voudrais concevoir un déclencheur sur mytab qui doit être en mesure de capturer le paquet ou le nom de la procédure qui a émis le insert into.. et de stocker cette information dans un autre tableau my_tab_log.

J'ai fait quelques recherches et trouvé que $$PLSQL_UNIT et $$PLSQL_LINE pouvait indiquer le nom de la procédure, mais si ces variables sont utilisées dans un déclencheur, le nom du déclencheur serait capturé au lieu de l'emballage/le nom de la procédure qui a émis l'instruction DML.

comme -

CREATE OR REPLACE TRIGGER my_trg
AFTER INSERT OR UPDATE OR DELETE
ON MY_TAB
FOR EACH ROW
BEGIN
    IF INSERTING THEN
         insert into my_tab_log values('INSERTED A ROW'
                                       sysdate,
                                       $$PLSQL_UNIT); 
    END IF;
    -- This would capture Trigger name but I would like to capture `MY_PACK.MY_PROC()`
    -- which issued the insert statement
    ...
END;

Maintenant depuis $$PLSQL_UNIT est une directive de compilation conditionnelle. Il est résolu lorsque vous complie/recompiler le code PL/SQL. Donc, malheureusement, $$PLSQL_UNIT au sein de déclenchement n'est rien de plus mais du nom du déclencheur et est résolu à déclencher moment de la compilation.

J'ai aussi trouvé la procédure owa_util.who_called_me mais je ne pouvais pas envelopper la tête autour de sur comment je pourrais l'utiliser pour l'adapter à mes besoins. Est-il même possible de réaliser ce que je veux sans faire de changements pour les paquets réels/stockées procs qui délivre les instructions DML? Je ne peux pas modifier ces programmes, et c'est difficile de restriction, donc ce n'est pas une option.

OriginalL'auteur Annjawn | 2013-01-28