Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jak to porpawic
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
delik
stwozylem funkcje ktora dziala i wykonuje to


CREATE OR REPLACE FUNCTION sortowanie(id int,liczba int) RETURNS int AS $$
DECLARE
zero int;
BEGIN
zero:=0;
if MOD($2,2)=zero then
insert into ldod(id,liczby) values($1,$2);
else
insert into lnie(id,liczby) values($1,$2);
END IF;
return null;
END;
$$ language plpgsql;





CREATE OR REPLACE FUNCTION sortowanieliczb() RETURNS
trigger AS $$
DECLARE
BEGIN

if TG_OP='insert' then

if liczby % 2 = 0 then
insert into liczby_parzyste(liczba_parzysta) values(new.liczby);

else
insert into liczby_nieparzyste(id,liczba_nieparzysta) values(new.id,new.liczby);
return new;
END IF;
END IF;
END;
$$LANGUAGE PLPGSQL;

mmmmmmm
Powinno być OK.
A swoją drogą to w tym pierwszym kodzie jest więcej błędów, niż w drugim.
delik
no to mi pomogles piszac powinno bcy ok jakby bylo kolego to bym nie zakldal tematu pozdrawiam

tworze tak to....



CREATE OR REPLACE FUNCTION sortowanielicz() RETURNS
trigger AS $$
DECLARE
BEGIN

if TG_OP='insert' and liczby % 2 = 0 then
insert into liczby_parzyste(id,liczba_parzysta) values(new.id,new.liczba_parzysta);
return new;
else

insert into liczby_nieparzyste(id,liczba_nieparzysta) values(new.id,new.liczba_nieparzysta);
return new;
END IF;
END;
$$LANGUAGE PLPGSQL;


pozniej


CREATE TRIGGER sortowanielicz BEFORE INSERT ON liczby FOR EACH ROW EXECUTE PROCEDURE
sortowanieliczb();



a gdy wpisuje insert into liczby(id,liczby) values(4,4);

jest bald i koentarz do neigo ERROR: control reached end of trigger procedure without RETURN
KONTEKST: PL/pgSQL function sortowanieliczb()


ma ktos jakis pomysl?
mmmmmmm
Trzeba było powiedzieć, że masz błąd...
Wywal
RETURN new;
na sam koniec (poza IF) - zawsze musisz zwracać albo new (gdy rekord ma być dodany), albo Null, gdy nie

Zaraz, zaraz.
Teraz jest błąd, bo i kod masz zupełnie inny. Tym NEW i NULL zasugerowałem się z poprzednigo info.
Teraz ci się wcześniej wywala.
Robisz:
  1. nsert INTO liczby_parzyste(id,liczba_parzysta) VALUES(new.id,new.liczba_parzysta);

A skąd w NEW ma być .liczba_parzysta, bądź .liczba_nieparzysta?? Tam jest po prostu .liczba exclamation.gif
delik
CREATE OR REPLACE FUNCTION sortowanieli() RETURNS
trigger AS $$
DECLARE
BEGIN

if TG_OP='insert' and Mod(liczby,2)=0 then
insert into liczby_parzyste(id,liczba_parzysta) values(new.id,new.liczba);
else
insert into liczby_nieparzyste(id,liczba_nieparzysta) values(new.id,new.liczba);
END IF;
return new;
END;
$$LANGUAGE PLPGSQL;


CREATE TRIGGER sortowanieli BEFORE INSERT ON liczby FOR EACH ROW EXECUTE PROCEDURE
sortowanieli();


insert into liczby(id,liczby) values(1,3);

i oto efekt:

SELECT TG_OP='insert' and Mod(liczby,2)=0
KONTEKST: PL/pgSQL function sortowanieli() line 5 at IF



tabele jakei mam stworzone:
liczby(id,liczby)
liczby_parzyste(id,liczba_parzysta)
liczby_nieparzyste(id,liczba_nieparzysta)


liczę na wasza pomoc bo ja jzu nie mam sil siedze nad tym do rana i efektu jakiegos do przodu brak.....




pozdr
mmmmmmm
NA-WIA-SY exclamation.gif!
  1. CREATE TABLE liczby(id bigint NOT NULL, liczby bigint NOT NULL);
  2. CREATE TABLE liczby_parzyste(id bigint NOT NULL, liczba_parzysta bigint NOT NULL);
  3. CREATE TABLE liczby_nieparzyste(id bigint NOT NULL, liczba_nieparzysta bigint NOT NULL);
  4.  
  5.  
  6. CREATE OR REPLACE FUNCTION fn_sortowanieliczb() returns TRIGGER AS
  7. $BODY$
  8. begin
  9. IF(upper(TG_OP) IN ('UPDATE', 'DELETE')) then
  10. DELETE FROM liczby_parzyste WHERE id=OLD.id;
  11. DELETE FROM liczby_nieparzyste WHERE id=OLD.id;
  12. end IF;
  13. IF(upper(TG_OP) IN ('INSERT', 'UPDATE') ) then
  14. IF(NEW.liczby%2=0) then
  15. INSERT INTO liczby_parzyste VALUES(NEW.id, NEW.liczby);
  16. else
  17. INSERT INTO liczby_nieparzyste VALUES(NEW.id, NEW.liczby);
  18. end IF;
  19. end IF;
  20. RETURN new;
  21. end;
  22. $BODY$
  23. LANGUAGE plpgsql cost 1;
  24.  
  25. CREATE TRIGGER tr_b_idu_liczby before INSERT OR UPDATE OR DELETE ON liczby FOR each row execute procedure fn_sortowanieliczb();
delik
jestes moim bogiem exclamation.gif!!!!!!! dzieki wielkie

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.