在 Firebird UDF 中识别当前 table 和记录值

Identifying the current table and record values in a Firebird UDF

我正在研究如何使用触发器创建 UDF 来复制 Firebird table 的完整记录。

我想创建一个关于一些 table 的 revision/history,使用 UDF 将数据复制到 mongodb 数据库以连接到 mongodb 并插入在那里记录。

我的问题是:是否可以创建一个 UDF,当我调用它时识别当前 table 和行以自动获取列值,而无需将值作为参数传递或仅传递 OLDNEW 上下文变量?

像这样:

CREATE TRIGGER 
    MY_REPLICATOR 
ACTIVE AFTER INSERT OR UPDATE OR DELETE 
POSITION 99 
ON MY_TABLE
AS
BEGIN
    /*INSIDE THE UDF IT IDENTIFIES THE CURRENT TABLE-ROW 
      AND REPLICATE ALL COLUMNS VALUES TO MY MONGODB*/
    MY_UDF_REPLICATION(OLD, NEW); 
END

在 Firebird 3 中,您可以使用任何体面的语言编写外部触发器并获取当前记录上下文。如果您仍在使用 FB 2.5 或更早版本,则使用为 table 中的每一列调用 UDF 的方法。根据数据库结构创建此类触发器可以轻松实现自动化。

CREATE TRIGGER MY_REPLICATOR FOR My_TABLE
  ACTIVE 
  AFTER INSERT OR UPDATE OR DELETE 
  POSITION 99 
AS
BEGIN
  MY_UDF_START_REPLICATE_ROW(CURRENT_TRANSACTION, 'MY_TABLE');

  MY_UDF_REPLICATE_INT_COLUMN(CURRENT_TRANSACTION, 'COLUMN_NAME_1', 
    OLD.column_name_1, NEW.column_name_1);
  MY_UDF_REPLICATE_VARCHAR_COLUMN(CURRENT_TRANSACTION, 'COLUMN_NAME_2', 
    OLD.column_name_2, NEW.column_name_2);
  ...
  -- call appropriate function for every column of the table
  ...

  MY_UDF_END_REPLICATE_ROW(CURRENT_TRANSACTION, 'MY_TABLE');
END