Ergebnis 1 bis 4 von 4

Thema: syntax error at or near "instead". Ich verzweifle

  1. #1
    ggroetschel ist offline Neuer Benutzer
    Registriert seit
    19.01.2012
    Beiträge
    2

    Standard syntax error at or near "instead". Ich verzweifle

    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

  2. #2
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von ggroetschel Beitrag anzeigen
    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

  3. #3
    ggroetschel ist offline Neuer Benutzer
    Registriert seit
    19.01.2012
    Beiträge
    2

    Standard Keine Veränderung

    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!

  4. #4
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von ggroetschel Beitrag anzeigen
    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:
    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

Ähnliche Themen

  1. Antworten: 10
    Letzter Beitrag: 05.01.2010, 11:29
  2. Antworten: 2
    Letzter Beitrag: 08.06.2009, 07:51
  3. Problem Function geht nicht "invalid input syntax for integer: (0,t,)"
    Von cfi im Forum Trigger und Funktionen
    Antworten: 2
    Letzter Beitrag: 05.09.2008, 08:10
  4. Antworten: 4
    Letzter Beitrag: 16.06.2008, 10:42
  5. syntax error at or near "="
    Von hugo1981 im Forum Programmierung
    Antworten: 2
    Letzter Beitrag: 28.11.2007, 11:34

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum