Wyzwalacz w PostgreSQL

0

Witam i od razu przechodzę do sedna: PROSZĘ O POMOC! Powiem tak: w Firebirdzie, w IbExpercie mialem sobie taka sekwencje:
REATE SEQUENCE GENERATOR_ID_DZIALU;
ALTER SEQUENCE GENERATOR_ID_DZIALU RESTART WITH 1;

Wklepałem to do PostgreSQL za pomocą pgAdmin i utworzyło ładnie sekwencję...Teraz chciałbym kod triggera utworzonego w Ib Expercie "wklepać" do pgAdmina...ale coś nie działa:
CREATE OR ALTER TRIGGER TRIGGER_DZIAL FOR DZIAL
ACTIVE BEFORE INSERT POSITION 0
AS
begin
NEW.Id_dzialu=gen_id(Generator_id_dzialu,1);
end

Rozumiem, że składnia jest inna, bo o to sie rozchodzi rzecz jasna, ale nie mogę w Internecie znaleźć odpowiedniej składni!!! Zwłaszcza z tym "NEW"...Byłbym niezmiernie wdzięczny jeśli ktos zmodyfikowałby mój trigger tak, aby utworzył się w PostgreSQL (za pomocą pgAdmin)...Z góry dzięki

0

a tyle szukałem w Internecie...DZIĘKUJĘ!!!

0

A niech to, dalej nie działa coś...Napisałem w pgAdminie cos takiego:
CREATE TRIGGER Trigger_dzial
BEFORE INSERT ON dzial
FOR EACH ROW
BEGIN
IF :NEW.Id_dzialu IS NULL THEN
SELECT generator_id_dzialu.NEXTVAL INTO :NEW.Id_dzialu
FROM dual;
END IF;
END;
/

Wywala jakieś błędy, że nie rozpoznaje BEGIN, wywale BEGIN to z kolei nie rozpoznaje IF...Czy coś robię źle???

0

sproboj moze cos takiego:
CREATE OR REPLACE FUNCTION trigger_dzial_procedura() RETURNS TRIGGER AS $trigger_dzial$
BEGIN
IF NEW.Id_dzialu IS NULL THEN
SELECT generator_id_dzialu.NEXTVAL INTO NEW.Id_dzialu FROM dual;
END IF;
RETURN NEW;
END;
$trigger_dzial$ language plpgsql;

CREATE TRIGGER Trigger_dzial BEFORE INSERT ON dzial FOR EACH ROW EXECUTE PROCEDURE trigger_dzial_procedura();

ta konstrucja dziala u mnie, wpisalem bez sprawdzenia tylko twoje zapytanie

0
mwili napisał(a)

sproboj moze cos takiego:
CREATE OR REPLACE FUNCTION trigger_dzial_procedura() RETURNS TRIGGER AS $trigger_dzial$
BEGIN
IF NEW.Id_dzialu IS NULL THEN
SELECT generator_id_dzialu.NEXTVAL INTO NEW.Id_dzialu FROM dual;
END IF;
RETURN NEW;
END;
$trigger_dzial$ language plpgsql;

CREATE TRIGGER Trigger_dzial BEFORE INSERT ON dzial FOR EACH ROW EXECUTE PROCEDURE trigger_dzial_procedura();

ta konstrucja dziala u mnie, wpisalem bez sprawdzenia tylko twoje zapytanie

Wpisałem ten kod i nie działa, wywala błąd:
ERROR: unterminated dollar-quoted string at or near "$trigger_dzial$

Coś nie do końca jest dobrze i nie wiem jak się z tym uporać...

I jesczez taki błąd teraz wyskakuje:
ERROR: language "plpgsql" does not exist

0

Ha! Już znalazłem rozwiązanie...Musiałem napisać i wywołać coś takiego:

CREATE TRUSTED PROCEDURAL LANGUAGE plpgsql
HANDLER plpgsql_call_handler;

Teraż śmiga wszystko jak przecinak...dzięki wielkie za pomoc!!! Pozdrawiam serdecznie

0

A jednak dalej nie działa....Wyswietla błąd na temat słowa "DUAL" :
Relation dual does not exists... Błagam, pomóżcie...nie wiem już co robić...

0

zaglądałeś do linków, które dałem??

0
Misiekd napisał(a)

zaglądałeś do linków, które dałem??

Oczywiście, że zaglądałem ale tam nie ma nic o dual...W ogóle te dual musi być? Coś tu jest nie tak...
Zastosowałem kod wyżej...

0

Haha, już sobie poradziłem...Koniec tematu, wszystko śmiga, tym razem już na pewno :-) ...Dzięki za wszelka pomoc...

1 użytkowników online, w tym zalogowanych: 0, gości: 1