我有:
CREATE OR REPLACE FUNCTION aktualizujIloscPodan() RETURNS TRIGGER AS $BODY$ DECLARE n integer; sid integer; BEGIN sid=0; IF (TG_OP='INSERT') THEN sid = NEW."studentID"; ELSIF (TG_OP='DELETE') THEN sid = OLD."studentID"; END IF; n = COALESCE ((SELECT count("studentID") as c FROM "Podania" WHERE "studentID"=sid GROUP BY "studentID"),0); UPDATE "Studenci" SET "licznikpodan" = n WHERE "ID"=sid; END; $BODY$ LANGUAGE plpgsql; DROP TRIGGER IF EXISTS triggenPodan ON "Podania"; CREATE TRIGGER triggenPodan AFTER INSERT OR DELETE ON "Podania" EXECUTE PROCEDURE aktualizujIloscPodan();
当我尝试执行:
DELETE FROM "Podania" I get ERROR: record "old" is not assigned yet DETAIL: The tuple structure of a not-yet-assigned record is indeterminate. CONTEXT: PL/pgsql function "aktualizujiloscpodan" line 11 at assignment ********** Błąd ********** ERROR: record "old" is not assigned yet Stan sql:55000 Szczegóły:The tuple structure of a not-yet-assigned record is indeterminate. Kontekst:PL/pgsql function "aktualizujiloscpodan" line 11 at assignment
好像不知道什么是OLD或NEW.我该如何解决?
您需要使用FOR EACH ROW
CREATE TRIGGER triggerPodan AFTER INSERT OR DELETE ON "Podania" FOR EACH ROW EXECUTE PROCEDURE aktualizujIloscPodan();