0
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();
내가 삽입 할 때 행은 저에게이 보여 내가 PL/pgSQL의 기능 contar_dest()
지금 :
ERROR : 실행 RETURN에게 문맥을 찾는없이 트리거 절차의 끝에 도달을 내가 원하지만 오류이 지금 뭘 :
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가 거짓 일 때 아무 것도 표시하지 않습니다. –
고마워, 네 말이 맞아. –