Witajcie,
Mam następujący problem. Stworzyłem triggera:
CREATE OR REPLACE TRIGGER DDL_AD_GIT_TRG AFTER DDL ON DATABASE
Trigger w zasadzie odkłada w postaci plików tekstowych dane źródło bazodanowe np ciało procedury lub pakietu. Podpiąłem trigger również pod tabele i fajnie działa ... dopóki ktoś nie wykonuje ALTER TABLE ... bo wtedy zapisuje mi się właśnie cała komenda ALTER TABLE ... Postanowiłem to nieco zmienić i zamiast:
l_count := ora_sql_txt(l_sql_text);
for i in 1..l_count loop
l_sql := l_sql||l_sql_text(i);
end loop;
dla tabeli robię:
select dbms_metadata.get_ddl('TABLE',ora_dict_obj_name) into l_sql from dual;
niestety mimo iż trigger jest na zdarzeniu AFTER to dbms_metadata.get_ddl zwraca mi źródło z PRZED altera. Przykład:
Dodaję do tabeli kolumnę poleceniem
ALTER TABLE ADD (COL2 varchar2(1));
a l_sql posiada DDL BEZ tej kolumny.
Nie wiem skąd taki rozjazd bo jak odświeżę widok tabeli np w TOAD to kolumna się dodaje bezproblemowo. Przypuszczam, że dbms_metadata posiada jakiś rodzaj "cache" i pewnie dopiero po chwili się to odświeża dlatego nie mam pełnego i aktualnego źródła tabeli. Mógłbym w opóźnieniu puścić np JOB'a ale to mało eleganckie rozwiązanie. Czy ktoś ma pomysł jak uzyskać źródło tabeli na triggerze after ddl?