我正在研究如何创建UDF以使用触发器复制Firebird表的完整记录。
我想创建一些关于某些表的修订/历史记录,使用UDF将数据复制到mongodb数据库以连接到mongodb并在那里插入记录。
我的问题是:可以创建一个UDF,当我调用它时,识别当前表和行以自动获取列值而不将值作为参数传递或只是传递OLD
和{{1上下文变量?
这样的事情:
NEW
答案 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