Article View: pl.comp.bazy-danych
Article #194396Re: ORACLE - jak sprawdzić, gdzie jest zmieniana wartość?
From: Piotr M Kuć
Date: Mon, 30 Mar 2015 13:50
Date: Mon, 30 Mar 2015 13:50
46 lines
3446 bytes
3446 bytes
W artykule <bd3d62f4-32c8-4500-af40-3c2aeee9fb99@googlegroups.com> goo-mlyny@ciach.net napisal(a): > Mam taki prosty trigger: > CREATE OR REPLACE TRIGGER AC_TG_POTW_EDI > BEFORE INSERT > ON ZAMOWIENIA_KLIENTOW > REFERENCING NEW AS New OLD AS Old > FOR EACH ROW > DECLARE > nowa_data date; > BEGIN > if :new.KOD_RODZAJU_ZAMOWIENIA='EDI' then > :new.POTWIERDZENIE_ZAMOWIENIA:='T'; > nowa_data := sysdate; > :new.DATA_WYDANIA := to_date(nowa_data); > --:new.DATA_WYDANIA := nowa_data; --tak też próbowałem, bo już kombinuję, jak koń... > :new.KOMENTARZ_NA_ZLECENIU:='Data wyd.: ' || TO_CHAR(nowa_data) || ' [-] ' || TO_CHAR(:new.DATA_WYDANIA); > end if; > END AC_TG_POTW_EDI; > / > > Pole DATA_WYDANIA jest typu date. > I po wprowadzeniu danych - w polu POTWIERDZENIE_ZAMOWIENIA mam T, > w polu KOMENTARZ_NA_ZLECENIU - mam 2x datę. > Niestety - w polu DATA_WYDANIA na końcu - czyli jak zrobię select * from ZAMOWIENIA_KLIENTOW - mam null. > Tak się domyślam, że może być jeszcze jakiś inny trigger, który wykonuje się później, niż mój - i zeruje ustawioną wartość. Ale nie wiem, jak namierzyć miejsce, gdzie to się dzieje. Cała struktura bazy, tabele, triggery - nie są moje, jest ich naprawdę mnóstwo - i nie mogę póki co znaleźć miejsca, gdzie następuje zmiana. W narzędziach typu PL/SQL Developer, Toad, itp., masz drzewko z hierarchią obiektów. Klikasz na tabelce i rozwijasz listę wyzwalaczy na niej, a potem przeglądasz każdy aż znajdziesz winowajcę. Ewentualnie możesz to sobie ręcznie sprawdzić: select * from user_triggers t where t.table_name = 'ZAMOWIENIA_KLIENTOW'; select * from user_source s where s.name = 'TRG_BLA_BLA_BLA' order by s.name, s.line; Jak łączysz się przez inny schemat niż ten sprawdzany to będziesz potrzebował widoków systemowych dba_triggers/all_triggers, dba_source/all_source. A tak na marginesie robienie TO_DATE na zmiennej typu DATE jest bez sensu. Do TO_CHAR zawsze podawaj format, bo inaczej polegasz na bieżących w sesji. Co jest raczej ryzykowne, zwłaszcza jak odpalasz coś z palucha, z crona, itp. Np. TO_CHAR(nowa_data,'dd-mm-yyyy hh24:mi:ss') -- Pozdrawiam, Piotr.Kuc-(szympans)-kuciak.net Piotr M Kuć
Technical Details
Message-ID:
<slrn.pl.mhil51.jfc.kuciak@PiotrMarianKuc>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!newsfeed.fsmpi.rwth-aachen.de!newsfeed.straub-nv.de!eternal-september.org!feeder.eternal-september.org!mx02.eternal-september.org!.POSTED!not-for-mailReferences:
<bd3d62f4-32c8-4500-af40-3c2aeee9fb99@googlegroups.com>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!newsfeed.fsmpi.rwth-aachen.de!newsfeed.straub-nv.de!eternal-september.org!feeder.eternal-september.org!mx02.eternal-september.org!.POSTED!not-for-mail From: Piotr M Kuć <kuciak@nospam.invalid> Newsgroups: pl.comp.bazy-danych Subject: Re: ORACLE - jak sprawdzić, gdzie jest zmieniana wartość? Date: Mon, 30 Mar 2015 13:50:43 +0000 (UTC) Organization: I Love Slrn-pl Lines: 46 Message-ID: <slrn.pl.mhil51.jfc.kuciak@PiotrMarianKuc> References: <bd3d62f4-32c8-4500-af40-3c2aeee9fb99@googlegroups.com> Mime-Version: 1.0 Injection-Date: Mon, 30 Mar 2015 13:50:43 +0000 (UTC) Injection-Info: mx02.eternal-september.org; posting-host="c3cf5c369de1862e6b8732582514b3ce"; logging-data="6067"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+Pc5DUJEKZo/F5QwWhdw3V" User-Agent: slrn/0.9.8.1 (pl-1.6.0w) (Windows (i686)) Hamster/2.0.6.0 Cancel-Lock: sha1:0c/pK/XqhlzbzAs2VbLSuecxads= X-Licznik: 8255 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit