2017-05-27 8 views
1

Ich untersuche, wie eine UDF erstellt wird, um einen vollständigen Datensatz einer Firebird-Tabelle mit Triggern zu replizieren.Ermitteln der aktuellen Tabelle und Datensatzwerte in einem Firebird UDF

Ich möchte eine Revision/History über einige Tabellen erstellen, replizieren die Daten in eine Mongodb-Datenbank mithilfe einer UDF, um eine Verbindung mit dem Mongodb herzustellen und den Datensatz dort einzufügen.

Meine Frage ist: ist möglich, eine UDF zu erstellen und wenn ich es die aktuelle Tabelle und Zeile rufen Sie erkennen automatisch die Spalten Werte zu erhalten, ohne die Werte als Argument übergeben oder einfach vorbei an den OLD und NEW Variablen Kontext?

Etwas wie folgt aus:

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 

Antwort

3

In Firebird 3 Sie externe Trigger auf jeder anständige Sprache schreiben kann und aktuellen Datensatz Kontext erhalten. Wenn Sie immer noch mit FB 2.5 oder älter arbeiten, verwenden Sie für jede Spalte in der Tabelle den Ansatz, UDF aufzurufen. Die Erzeugung solcher Trigger gemäß einer Struktur einer Datenbank könnte leicht automatisiert werden.

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

Ok, das ist ein Ansatz, aber es gibt keine andere Möglichkeit, dies in FB 2.x zu tun? Ich muss jede Spalte passieren? –

+1

@BetoNeto Firebird 3 UDRs sind die einzige echte Lösung, für Firebird 2.x können Sie etwas in externe Tabellen einfügen. –

Verwandte Themen