【发布时间】:2014-12-14 03:51:57
【问题描述】:
我正在尝试在 postgreSQL 中执行此操作: 您不能存储超过 5 条记录(行)。
CREATE FUNCTION contar_dest()
RETURNS TRIGGER AS
$body$
BEGIN
IF (SELECT COUNT(ID) FROM "LUGARES" WHERE demanda is not null) > 5
THEN
DELETE FROM "LUGARES"
WHERE ID = (SELECT max(ID) FROM "LUGARES");
RETURN NULL;
END IF;
END;
$body$
LANGUAGE plpgsql;
CREATE TRIGGER contar
AFTER INSERT
ON "LUGARES"
FOR EACH ROW
EXECUTE PROCEDURE contar_dest();
当我尝试插入一行时,请告诉我:
错误:执行到达触发过程的结尾,但没有找到 RETURN 上下文:PL/pgSQL 函数 contar_dest()
现在我做我想做的事,但现在的错误是:
CREATE FUNCTION contar_dest()
RETURNS TRIGGER AS
$body$
BEGIN
IF ((SELECT COUNT(ID) FROM "LUGARES" WHERE demanda is not null) > 5) THEN
DELETE FROM "LUGARES"
WHERE ID = (SELECT NEW.ID FROM "LUGARES");
ELSIF ((SELECT COUNT(ID) FROM "LUGARES" WHERE demanda is not null) < 5) THEN
RETURN NULL;
END IF;
RETURN NULL;
END;
$body$
LANGUAGE plpgsql;
CREATE TRIGGER contar
AFTER INSERT
ON "LUGARES"
FOR EACH ROW
EXECUTE PROCEDURE contar_dest();
INSERT INTO "LUGARES"(
nombre, demanda)
VALUES ('Valencia',2000);
ERROR: a subquery used as an expression returned more than one record
CONTEXT : SQL statement : " DELETE FROM "LUGARES"
WHERE ID = ( SELECT FROM NEW.ID "LUGARES") »
PL / pgSQL contar_dest ( ) function in line 4 SQL statement
********** Error **********
【问题讨论】:
-
您的查询中没有 ELSE,因此当 IF 为 false 时您不会返回任何内容。
-
谢谢,你说得对。
标签: postgresql triggers