识别当前表并记录Firebird UDF中的值

时间:2017-05-27 14:07:01

标签: mongodb firebird udf

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

我想创建一些关于某些表的修订/历史记录,使用UDF将数据复制到mongodb数据库以连接到mongodb并在那里插入记录。

我的问题是:可以创建一个UDF,当我调用它时,识别当前表和行以自动获取列值而不将值作为参数传递或只是传递OLD和{{1上下文变量?

这样的事情:

NEW

1 个答案:

答案 0 :(得分:3)

在Firebird 3中,您可以在任何不错的语言上编写外部触发器并获取当前记录上下文。如果您仍然使用FB 2.5或更早版本,则使用为表中的每个列调用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