syntax error at or near "instead". Ich verzweifle

Probleme und Fragen zum Thema Trigger und Funktionen.

syntax error at or near "instead". Ich verzweifle

Beitragvon ggroetschel » Do 19. Jan 2012, 02:20

Hallo Forum

Ich möchte einen ganz einfachen Trigger instead of auf eine view bringen.

Ich habe erfolgreich eine Funktion geschrieben:
CREATE OR REPLACE FUNCTION update_planner() RETURNS TRIGGER AS $$
DECLARE id_number INTEGER;
BEGIN
SELECT INTO id_number max(lid)+1 FROM XDATAGROUPD8B41609 where lid = 4;
--
-- Perform the required operation on emp, and create a row in emp_audit
-- to reflect the change made to emp.
--
IF (TG_OP = 'DELETE') THEN
DELETE FROM emp WHERE empname = OLD.empname;
IF NOT FOUND THEN RETURN NULL; END IF;

OLD.last_updated = now();
INSERT INTO emp_audit VALUES('D', user, OLD.*);
RETURN OLD;
ELSIF (TG_OP = 'UPDATE') THEN
UPDATE emp SET salary = NEW.salary WHERE empname = OLD.empname;
IF NOT FOUND THEN RETURN NULL; END IF;

NEW.last_updated = now();
INSERT INTO emp_audit VALUES('U', user, NEW.*);
RETURN NEW;
ELSIF (TG_OP = 'INSERT') THEN
NEW.last_updated = now();
INSERT INTO XDATAGROUPD8B41609 VALUES (id_number, NULL, NULL, NEW.last_updated, NEW.last_updated, NEW.date, NEW.project, NEW.consultant, NEW.comment, NEW.status, NEW.conscountry, NEW.days, NULL, NULL, NEW.counttocountry, NEW.invoiced);
RETURN NEW;
END IF;
END;
$$ LANGUAGE plpgsql;

Die ist jetzt drin.

Nun will ich zu dieser Funktion den Trigger installieren:
CREATE OR REPLACE TRIGGER test INSTEAD OF INSERT OR UPDATE OR DELETE ON planprojcat FOR EACH ROW EXECUTE PROCEDURE update_planner();

Und es kommt immer die Fehlermeldung:
ERROR: syntax error at or near "instead"
LINE 1: create trigger test instead of insert on planprojcat for eac...

Ich bin am verzweifeln und lese seit Stunden manuals und Anleitungen - ohne Erfolg.
planprojcat ist eine view.
Ich benutze die Postgresql Version 8.4.7 auf Ubuntu.
Ich habe es über pgadmin 3 und über die psql Kommandozeile versucht.

Herzlichen Dank für eine schnelle Hilfe.
Gunnar
ggroetschel
Neuer Benutzer
 
Beiträge: 2
Registriert: Do 19. Jan 2012, 01:27

Beitragvon akretschmer » Do 19. Jan 2012, 10:49

ggroetschel hat geschrieben:Hallo Forum

Ich möchte einen ganz einfachen Trigger instead of auf eine view bringen.

Ich habe erfolgreich eine Funktion geschrieben:
CREATE OR REPLACE FUNCTION update_planner() RETURNS TRIGGER AS $$
DECLARE id_number INTEGER;
BEGIN
SELECT INTO id_number max(lid)+1 FROM XDATAGROUPD8B41609 where lid = 4;
--
-- Perform the required operation on emp, and create a row in emp_audit
-- to reflect the change made to emp.
--
IF (TG_OP = 'DELETE') THEN
DELETE FROM emp WHERE empname = OLD.empname;
IF NOT FOUND THEN RETURN NULL; END IF;

OLD.last_updated = now();
INSERT INTO emp_audit VALUES('D', user, OLD.*);
RETURN OLD;
ELSIF (TG_OP = 'UPDATE') THEN
UPDATE emp SET salary = NEW.salary WHERE empname = OLD.empname;
IF NOT FOUND THEN RETURN NULL; END IF;

NEW.last_updated = now();
INSERT INTO emp_audit VALUES('U', user, NEW.*);
RETURN NEW;
ELSIF (TG_OP = 'INSERT') THEN
NEW.last_updated = now();
INSERT INTO XDATAGROUPD8B41609 VALUES (id_number, NULL, NULL, NEW.last_updated, NEW.last_updated, NEW.date, NEW.project, NEW.consultant, NEW.comment, NEW.status, NEW.conscountry, NEW.days, NULL, NULL, NEW.counttocountry, NEW.invoiced);
RETURN NEW;
END IF;
END;
$$ LANGUAGE plpgsql;

Die ist jetzt drin.

Nun will ich zu dieser Funktion den Trigger installieren:
CREATE OR REPLACE TRIGGER test INSTEAD OF INSERT OR UPDATE OR DELETE ON planprojcat FOR EACH ROW EXECUTE PROCEDURE update_planner();

Und es kommt immer die Fehlermeldung:
ERROR: syntax error at or near "instead"
LINE 1: create trigger test instead of insert on planprojcat for eac...

Ich bin am verzweifeln und lese seit Stunden manuals und Anleitungen - ohne Erfolg.
planprojcat ist eine view.
Ich benutze die Postgresql Version 8.4.7 auf Ubuntu.
Ich habe es über pgadmin 3 und über die psql Kommandozeile versucht.

Herzlichen Dank für eine schnelle Hilfe.
Gunnar


Laß mal beim Create Trigger das "OR REPLACE" weg ...


Andreas
--
ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)

https://www.xing.com/profile/Andreas_Kretschmer7
Hosting-Provider mit PostgreSQL-Support gesucht? Mich fragen!
akretschmer
Erfahrener Benutzer
 
Beiträge: 5937
Registriert: So 29. Okt 2006, 14:35
Wohnort: Kaufbach, Sachsen, Germany, Germany

Keine Veränderung

Beitragvon ggroetschel » Do 19. Jan 2012, 12:42

Leider keine Veränderung.
ixkimglobal2=# create trigger test instead of insert on planprojcat for each row execute procedure update_planner();
ERROR: syntax error at or near "instead"
LINE 1: create trigger test instead of insert on planprojcat ...

Ich habe jetzt noch mal gegoogelt und den Befehl von Hand noch mal eingegeben (vielleicht sind tabs irgendwie reingerutscht).
Hilft alles nix. Ich bin ratlos.

HILFE!
ggroetschel
Neuer Benutzer
 
Beiträge: 2
Registriert: Do 19. Jan 2012, 01:27

Beitragvon akretschmer » Do 19. Jan 2012, 12:48

ggroetschel hat geschrieben:Leider keine Veränderung.
ixkimglobal2=# create trigger test instead of insert on planprojcat for each row execute procedure update_planner();
ERROR: syntax error at or near "instead"
LINE 1: create trigger test instead of insert on planprojcat ...

Ich habe jetzt noch mal gegoogelt und den Befehl von Hand noch mal eingegeben (vielleicht sind tabs irgendwie reingerutscht).
Hilft alles nix. Ich bin ratlos.

HILFE!


Tja...

Code: Alles auswählen
test=*# create view "planprojcat" as select * from data;
CREATE VIEW
test=*# create trigger test instead of insert on planprojcat for each row execute procedure update_planner();
ERROR:  function update_planner() does not exist
test=*# create function update_planner() returns trigger as $$begin return new; end;$$language plpgsql;
CREATE FUNCTION
test=*# create trigger test instead of insert on planprojcat for each row execute procedure update_planner();
CREATE TRIGGER


bei mir geht es ...


Andreas
--
ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)

https://www.xing.com/profile/Andreas_Kretschmer7
Hosting-Provider mit PostgreSQL-Support gesucht? Mich fragen!
akretschmer
Erfahrener Benutzer
 
Beiträge: 5937
Registriert: So 29. Okt 2006, 14:35
Wohnort: Kaufbach, Sachsen, Germany, Germany


Zurück zu Trigger und Funktionen

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste