PostgreSQL触发器错误
发布时间:2020-12-13 16:27:21 所属栏目:百科 来源:网络整理
导读:我有: CREATE OR REPLACE FUNCTION aktualizujIloscPodan() RETURNS TRIGGER AS$BODY$ DECLARE n integer; sid integer;BEGINsid=0;IF (TG_OP='INSERT') THENsid = NEW."studentID";ELSIF (TG_OP='DELETE') THENsid = OLD."studentID";END IF;n = COALESCE
我有:
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(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |