2011-08-08 4 views
2

J'essaie d'implémenter un contrôle de version pseudo et un référentiel pour Oracle. L'idée est la suivante: lorsqu'une fonction/procédure stockée est modifiée ou qu'un déclencheur DATABASE global créé est déclenché, ce dernier récupère les sources actuelles d'un objet modifié et les stocke dans une table. Je suis en utilisant deux déclencheurs:Oracle APRES/BEFORE CREATE ON DATABASE déclencheur: comment accéder aux sources d'objets

TRIGGER BEFORE_MODIFY before ALTER or CREATE ON DATABASE 
TRIGGER AFTER_MODIFY after ALTER or CREATE ON DATABASE 

Tout fonctionne très bien, sauf la gâchette AFTER_MODIFY voit une ancienne version (sources) de l'objet compilé. J'ai essayé d'obtenir des sources de SYS.SOURCE$.SOURCE et un deuxième essai de dbms_metadata.get_ddl(OBJ_TYPE, OBJ_NAME, OBJ_OWNER) avec les mêmes résultats.

Je suis à la recherche de conseils ou d'une réponse définitive telle que "Vous ne pouvez pas le faire dans Oracle 10g +".

Répondre

0

Suggérer que vous venez d'utiliser ora_sql_txt pour obtenir le nouveau code:

create or replace TRIGGER AFTER_MODIFY after CREATE ON hr.SCHEMA 
declare 
    sql_text ora_name_list_t; 
    n number; 
begin 
    n := ora_sql_txt(sql_text); 
    FOR i IN 1..n LOOP 
    dbms_output.put_line(sql_text(i)); 
    END LOOP; 
end; 
/
+0

Merci Gary, qui me aide et fonctionne très bien. – Dimus