triggers - 在 Firebird 触发器中处理新旧变量

标签 triggers firebird

这是我在 Firebird 触发器中访问新旧变量的伪代码。

create trigger my_trigger for cards
  before insert or update
as
  declare var_reccord cards;
begin
    if (inserting) then
    begin
        var_reccord = new;
    end
    else
    begin
        var_reccord = old;
    end

    -- USE var_reccord
end

但这对我不起作用。我该怎么做?

最佳答案

您似乎想使用像 Oracle 的 %ROWTYPE 这样的东西,但不幸的是,当前的 Firebird 版本不支持它。

oldnew 上下文变量允许访问列,而不是整行。换句话说,您必须像 old.columnName 一样使用它们。查看documentation了解更多信息。

例如,如果表 cards 有一个字段 foo 那么您可以像这样使用它

create trigger my_trigger for cards
  before insert or update
as
  declare var_foo TYPE OF COLUMN cards.foo;
begin
    if (inserting) then
    begin
        var_foo = new.foo;
    end
    else
    begin
        var_foo = old.foo;
    end

    -- USE var_foo
end

关于triggers - 在 Firebird 触发器中处理新旧变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42397939/

相关文章:

sql-server - 在迁移到 Azure DB 期间如何处理 SQL Server 数据库上的触发器?

python - 使用 pyodbc 连接到 Firebird 来绑定(bind)参数

php - 通过 SSH 连接 Firebird DB

wpf - 调试触发器(或者为什么这个触发器不起作用?)

mysql - SQL on UPDATE 将旧数据保存到另一个表中

sql - MSSQL : Disable triggers for one INSERT

tcp - 带有 Firebird 1.0.3 和防火墙设置的事件端口

delphi - Delphi 应用程序的 Firebird 错误 "username and password are not defined"

wildfly - Firebird 3 sysdba 密码惊人问题

wpf - 触发器的 UserControl 自定义属性