【问题标题】:postgreSQL for-each-row before-update triggers : the NEW and OLD pseudo-rowspostgreSQL for-each-row before-update 触发器:NEW 和 OLD 伪行
【发布时间】:2013-01-07 14:41:31
【问题描述】:

自动返回触发器的函数是否能够在为每一行指定的更新前触发器中引用 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语句中的触发器名称完全匹配,还是只是一个占位符?

【问题讨论】:

    标签: postgresql triggers postgresql-9.2


    【解决方案1】:

    自动能够在为每一行指定的更新前触发器中引用 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

    【讨论】:

    • 感谢您的回答、链接和$dollar quoting$的解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-03
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 2018-12-19
    • 2014-02-15
    相关资源
    最近更新 更多