在插入触发器之前,我具有以下功能:
CREATE OR REPLACE FUNCTION schema.table_somefun()
RETURNS trigger AS
LANGUAGE 'plpgsql';
$BODY$
BEGIN
IF NEW.col2 NOT NULL THEN
NEW.col1 := CASE NEW.col1
WHEN '121432' THEN '321123'
ELSE <command> END CASE; --there should be a command aborting insertion without error or exception
END IF;
RETURN NEW;
END;
$BODY$
ELSE
语句应中止插入。有没有命令可以删除查询而不通知给客户端并使表保持不变?
答案 0 :(得分:1)
只需使用
RETURN NULL;
代替
RETURN NEW;
取消该行的INSERT
,而不执行任何操作。
但是您不能在SQL CASE
表达式的内部 中执行PL / pgSQL语句。 (不要将SQL CASE
与类似的control structure CASE
of PL/pgSQL混淆!)
可能看起来像这样:
CREATE OR REPLACE FUNCTION schema.table_somefun()
RETURNS trigger AS
$func$
BEGIN
IF NEW.col2 NOT NULL THEN
IF NEW.col1 = '121432' THEN -- could also be plpgsql CASE ...
NEW.col1 := '321123';
ELSE
RETURN NULL;
END IF;
END IF;
RETURN NEW;
END
$func$ LANGUAGE plpgsql;