在 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 和行以自动获取列值,而无需将值作为参数传递或仅传递 OLD
和 NEW
上下文变量?
像这样:
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
我正在研究如何使用触发器创建 UDF 来复制 Firebird table 的完整记录。
我想创建一个关于一些 table 的 revision/history,使用 UDF 将数据复制到 mongodb 数据库以连接到 mongodb 并插入在那里记录。
我的问题是:是否可以创建一个 UDF,当我调用它时识别当前 table 和行以自动获取列值,而无需将值作为参数传递或仅传递 OLD
和 NEW
上下文变量?
像这样:
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