2011-08-08 6 views
2

Oracle 용 의사 버전 제어 및 저장소를 구현하려고합니다. 아이디어는 다음과 같습니다 : 저장된 함수/프로 시저가 변경되거나 생성 된 전역 DATABASE 트리거가 실행되면 수정 된 개체의 현재 소스를 가져 와서 을 테이블에 저장합니다. 그래서 나는 두 개의 트리거를 사용하고 다음 AFTER_MODIFY 트리거가 컴파일 된 객체의 이전 버전 (소스)보고를 제외하고오라클 AFTER/BEFORE CREATE ON DATABASE 트리거 : 객체 소스에 액세스하는 방법

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

모든 것이 잘 작동합니다. 나는 소스를 SYS.SOURCE$.SOURCE에서 얻으려고 시도했으며, 두 번째 시도는 dbms_metadata.get_ddl(OBJ_TYPE, OBJ_NAME, OBJ_OWNER)에서 같은 결과를 얻으려고합니다.

"Oracle 10g +에서는 할 수 없습니다."와 같은 조언이나 확실한 답변을 찾고 있습니다.

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

방금 ​​새 코드를 얻을 수 ora_sql_txt 사용하는 것이 좋습니다.
+0

감사 게리, 나에게 도움 잘 작동 : – Dimus