2017-05-27 1 views
1

私は、トリガーを使用してFirebirdテーブルの完全なレコードを複製するUDFを作成する方法を研究しています。Firebird UDFでの現在のテーブルとレコードの値の特定

mongodbに接続してそこにレコードを挿入するために、UDFを使用してデータをmongodbデータベースに複製するいくつかのテーブルに関するリビジョン/履歴を作成します。

私の質問は:UDFとするとき、私は、引数として値を渡すか、単にOLDNEWコンテキスト変数を介さず自動に列の値を取得するために、現在のテーブルと行を認識し、それを呼び出すを作成することは可能でしょうか?このような

何か:火の鳥3では

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 

答えて

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 
+0

これはアプローチですが、FB 2.xでこれを行う方法は他にありませんか?私は各列を渡す必要がありますか? –

+1

@BetoNeto Firebird 3 UDRは唯一の真の解決策です.Firebird 2.xでは、外部テーブルに挿入することで何かできることがあります。 –

関連する問題