wywolanie procedury w trigerze
Pit - 26-01-2006 11:01
wywolanie procedury w trigerze
czy da się wywołać procedurę (lub funkcję) z triggera w oracle 9 ? standardowe call nazwa_procedury nie działa
=?ISO-8859-2?Q?S=B3awomir_Szysz=B3o?= - 26-01-2006 11:01
Dnia Wed, 25 Jan 2006 22:40:58 +0100, "Pit" <aa@aa.pl> wklepał(-a):
>czy da się wywołać procedurę (lub funkcję) z triggera w oracle 9 ? >standardowe call nazwa_procedury nie działa
Podaj po prostu nazwę procedury:
create trigger ... .... begin procedura_x (par1); .... end; -- Sławomir Szyszło mailto:slaszysz@poczta.onet.pl Primus inter FAQires & Grand Inquisitor no.0 of pl.comp.bazy-danych FAQ pl.comp.bazy-danych http://www.dbf.pl/faq/ Archiwum http://groups.google.com/groups?grou...mp.bazy-danych
Pit - 26-01-2006 11:01
> procedura_x (par1);
rzeczywiscie. Tyle ze chyba da sie wywolac tylko jakies malo skomplikowane procedury. Ja probowałem wywolac jedną, ktora korzysta w funkcji, a ta (funkcja) w klauzuli where uzywa indeksu z tabeli na ktorej jest trigger. M.in. do tych własnie wierszy (w funkcji) kompilator sie pluje
Pit - 26-01-2006 11:01
> rzeczywiscie. Tyle ze chyba da sie wywolac tylko jakies malo > skomplikowane procedury. Ja probowałem wywolac jedną, ktora korzysta > w funkcji, a ta (funkcja) w klauzuli where uzywa indeksu z tabeli na > ktorej jest trigger. M.in. do tych własnie wierszy (w funkcji) > kompilator sie pluje
dokładnie wywala się w funkcji na linii: select upper(grupa),upper(eurocode),premiera into gr,euro,prem from towary where id=tow; gdzie tow podana w wywolaniu funkcji (trigger zrobiony jest na update jednej z kolumn tabeli towary). Jak zakomentuje ten wiersz to trigger idzie bez bledow. Pisze bo moze ktos od razu bedzie wiedzial o co chodzi..
Lucyna Witkowska - 26-01-2006 11:01
Pit <aa@aa.pl> napisał: > dokładnie wywala się w funkcji na linii: > select upper(grupa),upper(eurocode),premiera into gr,euro,prem from towary > where id=tow; > gdzie tow podana w wywolaniu funkcji (trigger zrobiony jest na update jednej > z kolumn tabeli towary). > Jak zakomentuje ten wiersz to trigger idzie bez bledow. > Pisze bo moze ktos od razu bedzie wiedzial o co chodzi..
To nie problem funkcji tylko tego, ze w triggerze FOR EACH ROW, ktory wywolywany jest przy zmianie kolumny w tabeli towary (UPDATE), chcesz odczytac tą samą tabelę (SELECT). Tak sie nie da zrobic - wystapi błąd: mutating table.
Pozdrowienia, LW
Morff - 26-01-2006 11:01
Dnia 26-01-2006 o 08:01:33 Lucyna Witkowska <ypwitkow@nospamcyf-kr.edu.pl> napisał:
> To nie problem funkcji tylko tego, ze w triggerze FOR EACH ROW, ktory > wywolywany jest przy zmianie kolumny w tabeli towary (UPDATE), chcesz > odczytac tą samą tabelę (SELECT). > Tak sie nie da zrobic - wystapi błąd: mutating table. > > Pozdrowienia, > LW
i jeszcze zczytuje wartości pól do zmiennych - czyli pewnie chce te wartości gdzieś zapisać do innej tabeli - więc select prawdopodobnie wogóle nie jest potrzebny - wystarczy insert into innatabela values(upper(:NEW.grupa),upper(:NEW.eurocode),:NEW .premiera) ... lub :OLD ..
-- Pozdrawiam Morff ---------------------- AQQ 141151 Powered by Opera/M2
Pit - 27-01-2006 10:47
> To nie problem funkcji tylko tego, ze w triggerze FOR EACH ROW, ktory > wywolywany jest przy zmianie kolumny w tabeli towary (UPDATE), chcesz > odczytac tą samą tabelę (SELECT). > Tak sie nie da zrobic - wystapi błąd: mutating table.
dzięki. Przerobiłem funkcję tak, aby została jej stara funkcjonalność ale żeby mógł z niej również korzystać trigger
Pit - 27-01-2006 10:47
> i jeszcze zczytuje wartości pól do zmiennych - czyli pewnie chce te > wartości gdzieś zapisać do innej tabeli - więc select prawdopodobnie > wogóle nie jest potrzebny - wystarczy > insert into innatabela > values(upper(:NEW.grupa),upper(:NEW.eurocode),:NEW .premiera) > .. lub :OLD ..
wartości są zczytywane i później wykorzystywane w funkcji. Już sobie poradziłem, dzięki.
Pit - 27-01-2006 10:47
Pit wrote: >> To nie problem funkcji tylko tego, ze w triggerze FOR EACH ROW, ktory >> wywolywany jest przy zmianie kolumny w tabeli towary (UPDATE), chcesz >> odczytac tą samą tabelę (SELECT). >> Tak sie nie da zrobic - wystapi błąd: mutating table. > > dzięki. Przerobiłem funkcję tak, aby została jej stara funkcjonalność > ale żeby mógł z niej również korzystać trigger
ale swoją drogą to trochę ubogi? jest ten tak rozpanoszony oracle. Nie potrafi nawet takich prostych rzeczy... Takie rzeczy (jak poniżej) na Sybase idą bez najmniejszych problemików a oracle ma jakieś mutacje ;). Przecież jak tigger jest after to wiadomo jaka jest wartość kolumny...
trigger na tabeli towary: BEGIN insert into temp select fun(id),2,3,4,5 from klienci; END;
funkcja: (ind integer) RETURN integer IS res integer; BEGIN select numer into res from towary where id = ind; return res; End;
Lucyna Witkowska - 27-01-2006 10:48
Pit <aa@aa.pl> napisał: > ale swoją drogą to trochę ubogi? jest ten tak rozpanoszony oracle. Nie > potrafi nawet takich prostych rzeczy... > Takie rzeczy (jak poniżej) na Sybase idą bez najmniejszych problemików a > oracle ma jakieś mutacje ;). Przecież jak tigger jest after to wiadomo jaka > jest wartość kolumny...
Oczywiscie :new.kolumna :-) Jak zagwarantujesz, ze SELECT odczytuje tylko zmieniany wiersz? Zmiana UPDATE musi wygladac tak samo niezaleznie od kolejnosci wykonania dla poszczegolnych wierszy. Gdyby mozna bylo czytac tabele w trakcie zmian mozna by bylo, zależnie od tego w jakiej kolejnosci zmieniane są wiersze dostac inny wynik.
Mozna odczytywac taką tabelę w transakcji autonomicznej, ale wtedy jest dostep tylko do danych przed zmianą.
Pozdrowienia, LW
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[oracle] czy da =?ISO-8859-2?Q?si=EA_z_poziomu_procedury_?==?ISO-8859-2?Q?zrobi=E6_kopi=EA_zapasow=B1=3F?=
MSSQL 2005 i uruchamianie procedury o =?ISO-8859-2?Q?okre=B6lone?==?ISO-8859-2?Q?j_godzinie?=
[MS SQL 2000/2005] Procedura z dynamicznym SQL
=?iso-8859-2?q?Procedura_sk=B3adowalna_wywo=B3ywana_o_okreslo nej_godzinie?=
[ORACLE] Stored Procedures - jaki typ danych przy dostępnie poprzez ADO?
=?iso-8859-2?q?[Mysql_5=2E0]_Wywo=B3ywanie_procedury_jako_parametr_funkcji?=
[MySQL5] problem z zastosowanie funkcji, procedury w celu unikniecia powtórzeń kodu w zapytaniach
=?iso-8859-2?q?wysy=B3anie_emaila_za_pomoca_procedury_skladow anej_Oracle?=
=?iso-8859-2?Q?=5Boracle_pl/sql=5D_r=F3=BFnice_w_tworzeniu_procedur?=
=?iso-8859-2?q?Nazwa_Tabeli_jako_parametr_w_procedurze_sk=B3a dowanej?=
zanotowane.pldoc.pisz.plpdf.pisz.plmelooonka.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|