ďťż
 
wywolanie procedury w trigerze ďťż
 
wywolanie procedury w trigerze
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • melooonka.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com