0

自动返回触发器的函数是否能够在为每一行指定的更新前触发器中引用 NEW 和 OLD 伪行?

 CREATE TRIGGER foo_trigger BEFORE UPDATE ON emp
    FOR EACH ROW EXECUTE PROCEDURE foo();

   CREATE FUNCTION foo() RETURNS trigger AS $foo_trigger$
    BEGIN  
        NEW.taxrate := 5.5;        
        RETURN NEW;
    END;
    $foo_trigger$ LANGUAGE plpgsql;

$....$并且函数最后一行中的字符串必须与$foo_trigger$ LANGUAGE plpgsql;CREATE TRIGGER 语句中的触发器名称完全匹配,还是只是一个占位符?

4

1 回答 1

3

自动能够在为每一行指定的更新前触发器中引用 NEW 和 OLD 伪行

是的。

引用手册http://www.postgresql.org/docs/current/static/plpgsql-trigger.html

当 PL/pgSQL 函数作为触发器调用时,会在顶层块中自动创建几个特殊变量。


字符串 [...] 必须与 CREATE TRIGGER 语句中的触发器名称完全匹配,还是只是一个占位符

不。

这个$..$东西被称为“美元引用”,它只是简单地替换单引号以使处理大字符串(带有嵌入式引号)更容易。唯一的要求是您在开始和结束时使用相同的“密钥”。你可以使用$body$(这很常见)或任何你喜欢的东西。

有关详细信息,请参阅手册:http ://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-DOLLAR-QUOTING

于 2013-01-23T23:28:34.573 回答