【发布时间】:2015-08-01 19:50:27
【问题描述】:
我在触发器中遇到递归问题。
我有桌子:
CREATE TABLE employees(
task int4 NOT NULL,
first_name varchar(40) NOT NULL,
last_name varchar(40) NOT NULL,
PRIMARY KEY (task, cli_id_number)
);
当我插入值时:
(123, name, last)
我也想自动插入这些值:
(321, name, last)
我按以下方式执行此操作,但显然触发器是递归的,并且在第一次递归之后它会尝试插入先前插入的值。
CREATE OR REPLACE FUNCTION insert_task() RETURNS trigger AS $BODY$
BEGIN
IF new.task = '123' AND (
SELECT cant FROM (
SELECT name, task, count(*) AS cant
FROM client_task
WHERE name = NEW.name AND task = NEW.task
GOUP BY 1,2
HAVING count(*) <= 1
) t) = 1 THEN
INSERT INTO client_task(task, name, last_name)
VALUES('321', NEW.task, NEW.name, NEW.last_name);
RETURN NEW;
ELSE
IF NEW.task = '321' AND (
SELECT cant FROM (
SELECT name, task, count(*) AS cant
FROM client_task
WHERE name = NEW.name AND task = NEW.task
GROUP BY 1, 2
HAVING count(*) <=1
) t) = 1 THEN
INSERT INTO client_task(task, name, last_name)
VALUES('123', NEW.task, NEW.name, NEW.last_name);
RETURN NEW;
END IF;
END IF;
RETURN NULL;
END; $BODY$ LANGUAGE 'plpgsql';
任何帮助表示赞赏。
【问题讨论】:
-
@DavidVega según este hilo, están preparando el lanzamiento de StackOverflow en español。 Lamentablemente esta página utiliza inglés exclusivamente, por lo tanto dentrán que cerrar tu pregunta。 (我将用户引导到一个据说即将推出的西班牙语 StackOverflow 上的线程,并解释该网站只有英文,所以他的问题将被关闭。)
标签: postgresql