在 PostgreSQL 中,我创建了触发器过程来执行一些验证并在插入或更新表中的行之前执行一些查询。对于插入操作,我的触发器运行良好,所以我正在执行一些查询,但对于更新,我无法执行查询。
CREATE FUNCTION RECORDS_VALIDATE() RETURNS TRIGGER AS $$
DECLARE
tblVar text := dynamically im creating table name;
BEGIN
IF NEW.date <= CURRENT_DATE THEN
RAISE NOTICE 'DATE IS LESS THAN THE CURRENT DATE';
RETURN NULL;
END IF;
IF (TG_OP = 'UPDATE') THEN
EXECUTE 'UPDATE '|| tblVar || ' SET id = $1,date = $2 where id = $3'
USING NEW.id,NEW.date,OLD.id;
RETURN NULL;
END IF;
IF(TG_OP = 'INSERT') THEN
EXECUTE 'INSERT INTO ' || tblVar || ' VALUES($1,$2)'
USING NEW.id, NEW.date;
RETURN NULL;
END IF;
END;
$$ LANGUAGE plpgsql;
扳机
CREATE TRIGGER RECORDS BEFORE INSERT OR UPDATE ON RECORDS
FOR EACH ROW EXECUTE PROCEDURE RECORDS_VALIDATE();
注意:RECORDS 是来自这个基表名称的基表我正在动态创建表,所以我不想在 RECORDS 中插入行,这就是为什么我返回 NULL 我需要在新创建的表中插入行,所以使用执行命令我正在运行查询以在新创建的表中插入行。
INSERT
这将在新创建的表中插入不在记录中的行
INSERT INTO BILLING_RECORDS VALUES(1,date '2013-10-15');
更新
在新创建的表中运行此行时未更新。也没有给出错误。我的输出为 UPDATE 0
UPDATE RECORDS SET id = 10,date = date '2013-12-30' where id=1;