konto usunięte

Temat: Trigger oracle

Witam
Jak można napisać triggera który zaktualizuje kolumnę data_modyfikacji dla modyfikowanego kontrahenta w tabeli kontrahenci ?

ja napisałem coś takiego dla kolumny nazwa_kolumy ale sypie błędami:

create or replace trigger after_upd_konr
after update on kontrahenci
FOR EACH ROW
begin
if :new.nazwa_firmy <> :old.nazwa_firmy then
update kontrahenci set data_upd = sysdate;
end if;
end;

ORA-04091: table ADMIN.KONTRAHENCI is mutating, trigger/function may not see it ORA-06512: at "ADMIN.AFTER_UPD_KONR", line 3 ORA-04088: error during execution of trigger 'ADMIN.AFTER_UPD_KONR'

Dzięki za pomocJakub Suchocki edytował(a) ten post dnia 27.07.10 o godzinie 12:00

konto usunięte

Temat: Trigger oracle

Jakub Suchocki:
Witam
Jak można napisać triggera który zaktualizuje kolumnę data_modyfikacji dla modyfikowanego kontrahenta w tabeli kontrahenci ?

ja napisałem coś takiego dla kolumny nazwa_kolumy ale sypie błędami:

create or replace trigger after_upd_konr
after update on kontrahenci
FOR EACH ROW
begin
if :new.nazwa_firmy <> :old.nazwa_firmy then
update kontrahenci set data_upd = sysdate;
end if;
end;
--
create or replace trigger after_upd_konr
after update on kontrahenci
FOR EACH ROW
begin
if :new.nazwa_firmy <> :old.nazwa_firmy then
:new.data_modyfikacji = sysdate;
end if;
end;
a tak przy okazji to ten update narobił by ci ładnego ropie..

konto usunięte

Temat: Trigger oracle

Tomek P.:
Jakub Suchocki:
Witam
Jak można napisać triggera który zaktualizuje kolumnę data_modyfikacji dla modyfikowanego kontrahenta w tabeli kontrahenci ?

ja napisałem coś takiego dla kolumny nazwa_kolumy ale sypie błędami:

create or replace trigger after_upd_konr
after update on kontrahenci
FOR EACH ROW
begin
if :new.nazwa_firmy <> :old.nazwa_firmy then
update kontrahenci set data_upd = sysdate;
end if;
end;
--
create or replace trigger after_upd_konr
after update on kontrahenci
FOR EACH ROW
begin
if :new.nazwa_firmy <> :old.nazwa_firmy then
:new.data_modyfikacji = sysdate;
end if;
end;
a tak przy okazji to ten update narobił by ci ładnego ropie..
no wiem pojechałby po całości na szczescie to tylko baza testowa wiec można psuć. dzieki
Irek Słonina

Irek Słonina programowanie, bazy
danych i linuksy

Temat: Trigger oracle

Jakub Suchocki:
Witam
Jak można napisać triggera który zaktualizuje kolumnę data_modyfikacji dla modyfikowanego kontrahenta w tabeli kontrahenci ?

ja napisałem coś takiego dla kolumny nazwa_kolumy ale sypie błędami:

create or replace trigger after_upd_konr
after update on kontrahenci
FOR EACH ROW
begin
if :new.nazwa_firmy <> :old.nazwa_firmy then
update kontrahenci set data_upd = sysdate;
end if;
end;

ORA-04091: table ADMIN.KONTRAHENCI is mutating, trigger/function may not see it ORA-06512: at "ADMIN.AFTER_UPD_KONR", line 3 ORA-04088: error during execution of trigger 'ADMIN.AFTER_UPD_KONR'

Dzięki za pomocJakub Suchocki edytował(a) ten post dnia 27.07.10 o godzinie 12:00

Chcesz updatować wszystkie wiersze w tabeli?
Jeśli chcesz zupdatować tylko bieżący wiersz to robisz to tak:


if :new.nazwa_firmy <> :old.nazwa_firmy then
:NEW.data_upd = sysdate;
end if;


Ew. można ominąć mutable tak:
http://download.oracle.com/docs/cd/B28359_01/appdev.11...

lub tak:
http://web.archive.org/web/20080624162606rn_2/asktom.o...

konto usunięte

Temat: Trigger oracle

Irek Słonina:
Jakub Suchocki:
Witam
Jak można napisać triggera który zaktualizuje kolumnę data_modyfikacji dla modyfikowanego kontrahenta w tabeli kontrahenci ?

ja napisałem coś takiego dla kolumny nazwa_kolumy ale sypie błędami:

create or replace trigger after_upd_konr
after update on kontrahenci
FOR EACH ROW
begin
if :new.nazwa_firmy <> :old.nazwa_firmy then
update kontrahenci set data_upd = sysdate;
end if;
end;

ORA-04091: table ADMIN.KONTRAHENCI is mutating, trigger/function may not see it ORA-06512: at "ADMIN.AFTER_UPD_KONR", line 3 ORA-04088: error during execution of trigger 'ADMIN.AFTER_UPD_KONR'

Dzięki za pomocJakub Suchocki edytował(a) ten post dnia 27.07.10 o godzinie 12:00

Chcesz updatować wszystkie wiersze w tabeli?
Jeśli chcesz zupdatować tylko bieżący wiersz to robisz to tak:


if :new.nazwa_firmy <> :old.nazwa_firmy then
:NEW.data_upd = sysdate;
end if;


Ew. można ominąć mutable tak:
http://download.oracle.com/docs/cd/B28359_01/appdev.11...

lub tak:
http://web.archive.org/web/20080624162606rn_2/asktom.o...
ta całosc tabeli wykorzystana było tylko po to żeby odpalić triggera :) ale dzieki

konto usunięte

Temat: Trigger oracle

Irek Słonina:
Jakub Suchocki:
Witam
Jak można napisać triggera który zaktualizuje kolumnę data_modyfikacji dla modyfikowanego kontrahenta w tabeli kontrahenci ?

ja napisałem coś takiego dla kolumny nazwa_kolumy ale sypie błędami:

create or replace trigger after_upd_konr
after update on kontrahenci
FOR EACH ROW
begin
if :new.nazwa_firmy <> :old.nazwa_firmy then
update kontrahenci set data_upd = sysdate;
end if;
end;

ORA-04091: table ADMIN.KONTRAHENCI is mutating, trigger/function may not see it ORA-06512: at "ADMIN.AFTER_UPD_KONR", line 3 ORA-04088: error during execution of trigger 'ADMIN.AFTER_UPD_KONR'

Dzięki za pomocJakub Suchocki edytował(a) ten post dnia 27.07.10 o godzinie 12:00

Chcesz updatować wszystkie wiersze w tabeli?
Jeśli chcesz zupdatować tylko bieżący wiersz to robisz to tak:


if :new.nazwa_firmy <> :old.nazwa_firmy then
:NEW.data_upd = sysdate;
end if;


Ew. można ominąć mutable tak:
http://download.oracle.com/docs/cd/B28359_01/appdev.11...

lub tak:
http://web.archive.org/web/20080624162606rn_2/asktom.o...


W przypadku teg if-a

if :new.nazwa_firmy <> :old.nazwa_firmy then

:NEW.data_upd = sysdate;

end if;

czy nie dostane ory ze znakime '='
Irek Słonina

Irek Słonina programowanie, bazy
danych i linuksy

Temat: Trigger oracle

Jakub Suchocki:
W przypadku teg if-a

if :new.nazwa_firmy <> :old.nazwa_firmy then

:NEW.data_upd = sysdate;

end if;

czy nie dostane ory ze znakime '='

Nie wiem co oznacza 'ory za znakime' ale pewnie Ci chodzi o to, że jest = zamiast :=. Oczywiście masz rację, powinno być :=. Chyba, że i to nie pomoże to SELECT SYSDATE INTO :NEW.data_upd FROM dual;

konto usunięte

Temat: Trigger oracle

Irek Słonina:
Jakub Suchocki:
W przypadku teg if-a

if :new.nazwa_firmy <> :old.nazwa_firmy then

:NEW.data_upd = sysdate;

end if;

czy nie dostane ory ze znakime '='

Nie wiem co oznacza 'ory za znakime' ale pewnie Ci chodzi o to, że jest = zamiast :=. Oczywiście masz rację, powinno być :=. Chyba, że i to nie pomoże to SELECT SYSDATE INTO :NEW.data_upd FROM dual;


Nie za bardzo kumam z tym SELECT SYSDATE INTO :NEW.data_upd FROM dual; w którym miesjcu to wrzucić
Irek Słonina

Irek Słonina programowanie, bazy
danych i linuksy

Temat: Trigger oracle

Jakub Suchocki:
Nie za bardzo kumam z tym SELECT SYSDATE INTO :NEW.data_upd FROM dual; w którym miesjcu to wrzucić


Sprawdź czy to działa:


if :new.nazwa_firmy <> :old.nazwa_firmy then
:NEW.data_upd := sysdate;
end if;


Jeśli powyższe nie działa to tak:


if :new.nazwa_firmy <> :old.nazwa_firmy then
SELECT SYSDATE INTO :NEW.data_upd FROM DUAL;
end if;

konto usunięte

Temat: Trigger oracle

Irek Słonina:
Jakub Suchocki:
Nie za bardzo kumam z tym SELECT SYSDATE INTO :NEW.data_upd FROM dual; w którym miesjcu to wrzucić


Sprawdź czy to działa:


if :new.nazwa_firmy <> :old.nazwa_firmy then
:NEW.data_upd := sysdate;
end if;


Jeśli powyższe nie działa to tak:


if :new.nazwa_firmy <> :old.nazwa_firmy then
SELECT SYSDATE INTO :NEW.data_upd FROM DUAL;
end if;

-----------------------------------------
create or replace trigger after_upd_konr
after update on kontrahenci
FOR EACH ROW
begin
if :new.nazwa_firmy <> :old.nazwa_firmy then
SELECT SYSDATE INTO :NEW.data_upd FROM DUAL;
end if;
end;

ORA-04084: cannot change NEW values for this trigger type

-----------------------------------------
ten sam komunikat dla pierwszej wersji.
Piotr B.

Piotr B.
http://www.linkedin.
com/in/piotrbystrzyc
ki

Temat: Trigger oracle

ORA-04084:
cannot change NEW values for this trigger type
Cause: New trigger variables can only be changed in before row insert or update triggers.
Action: Change the trigger type or remove the variable reference.

konto usunięte

Temat: Trigger oracle

Piotr B.:
ORA-04084:
cannot change NEW values for this trigger type
Cause: New trigger variables can only be changed in before row insert or update triggers.
Action: Change the trigger type or remove the variable reference.


no dobra to jak go zmienić, żeby działał z before update
Irek Słonina

Irek Słonina programowanie, bazy
danych i linuksy

Temat: Trigger oracle

Jakub Suchocki:
no dobra to jak go zmienić, żeby działał z before update

a nie działa?

konto usunięte

Temat: Trigger oracle

Irek Słonina:
Jakub Suchocki:
no dobra to jak go zmienić, żeby działał z before update

a nie działa?

nie dział ORA-04084: cannot change NEW values for this trigger type. Z komunikatu wynika, że takiego rozwiazania mozna uzywać tylko w przypadku before update insert

konto usunięte

Temat: Trigger oracle

Jakub Suchocki:
no dobra to jak go zmienić, żeby działał z before update

Moze najpierw usun ze swojego profilu "szkolenia Administratorów WMS z PL/SQL", bo po tej dyskusji nikt Ci w to nie uwierzy :)
Irek Słonina

Irek Słonina programowanie, bazy
danych i linuksy

Temat: Trigger oracle

Jakub Suchocki:
Irek Słonina:
Jakub Suchocki:
no dobra to jak go zmienić, żeby działał z before update

a nie działa?

nie dział ORA-04084: cannot change NEW values for this trigger type. Z komunikatu wynika, że takiego rozwiazania mozna uzywać tylko w przypadku before update insert

Zgadza się. Piotr wskazał Ci rozwiązanie. Zrób trigger before zamiast after.

konto usunięte

Temat: Trigger oracle

Ireneusz Ptak:
Jakub Suchocki:
no dobra to jak go zmienić, żeby działał z before update

Moze najpierw usun ze swojego profilu "szkolenia Administratorów WMS z PL/SQL", bo po tej dyskusji nikt Ci w to nie uwierzy :)
Myśle ze to nie jest rozwiazanie na moje pytanie ale to normalne na polskich forach. PL/SQL to nie tylko triggery a fora sa po to żeby rozwiazywać problemy.

konto usunięte

Temat: Trigger oracle

Na forach trzeba miec tez troche szacunku do osob, ktore odpowiadaja na takie pytania.

Dostales konkretna odpowiedz, pomimo tego ze znalezienie rozwiazania z pomoca Googla nie powinno zajac Ci dluzej niz 30 sekund - nie powinienes narzekac.

konto usunięte

Temat: Trigger oracle

Ireneusz Ptak:
Na forach trzeba miec tez troche szacunku do osob, ktore odpowiadaja na takie pytania.

Dostales konkretna odpowiedz, pomimo tego ze znalezienie rozwiazania z pomoca Googla nie powinno zajac Ci dluzej niz 30 sekund - nie powinienes narzekac.

A nie przyszło ci do głowy kolego, że być może nie o to mi chodziło wtrąciłeś swoje mądre 5 groszy pomimo tego, że cię o to nikt nie prosił. Gdybym chciał skorzystać z google to bym to zrobił ale uważam, ze po to są tego typu miejsca i fora żeby rozwiazywać takie problemy. A jeżeli nie masz nic do powiedzenia w temacie to lepiej pograj sobie w jakąś gierkę.

konto usunięte

Temat: Trigger oracle

Dzieki, wlasnie potwierdziles, ze szkoda czasu na dyskusje z Toba :)

Następna dyskusja:

Oracle_PL




Wyślij zaproszenie do