2017-04-13 2 views
1

Ist es möglich, einen Trigger zu erstellen, der eine CSV-Datei ausgibt, die Felder 1 aus Tabelle 1 direkt nach Aktualisierung von Tabelle 2 auswählt?Ausgabe einer CSV-Datei mit Trigger in Firebird

Ich habe versucht,

CREATE OR ALTER trigger test_a0 for Table 2 
active after insert or update position 0 
AS 
begin 

    if (updating and new.field1 is not null) then 
    output ('C:\test\test.csv'); 
    select field1 from table1; 
    output; 
    commit; 

end 
+0

Sie versuchen, es über externe Tabellen tun können, wenn Sie sich versichern, alle Zeilen haben genau die gleiche vordefinierte Länge in Zeichen und Pad die zu kurze Linie und schneide die zu langen Linien. aber die Idee, interne interne DB-Prozesse abhängig von externen Bedingungen (wie das Schreiben in CSV-Dateien) zu erzwingen, ist eine ziemlich schlechte Idee. Setzen Sie Ihre Trigger-Ereignisse ein und erstellen Sie ein eigenständiges Deamon-Programm, das auf diese Ereignisse wartet und dann diese CSV-Dateien erstellt. –

Antwort

2

Keine Verwendung dieser es zur Ausgabe in eine CSV-Datei in Auslöser in Firebird 2.5 nicht möglich ist. Wenn Sie in eine Datei ausgeben möchten, müssen Sie dies entweder in einer Client-Anwendung tun oder eine externe Tabelle verwenden (was technisch ein binäres Format und kein Textformat ist). Es könnte möglich sein, eine verworrene Lösung mit UDFs zu erstellen.

In Firebird 3 ist vielleicht eine einfachere Lösung mit UDR (User Defined Routines) möglich, aber das ist weitgehend unbekanntes Gebiet, also bin ich mir nicht sicher, ob es so gemacht werden kann.

1

Ich nehme an, Sie es mit IBExpert Tools tun können ibeblock

execute ibeblock 
as 
begin 
    txt=''; 
    for 
    select firstname, lastname 
    from customer 
    into :fn,:ln 
    do 
    begin 
     txt=txt+fn+';'+ln+ibec_crlf(); 
    end; 
    ibec_SaveToFile('C:\txt.csv',txt,__stfOverwrite); 
end 
+0

Interbase Expert ist ein eigenständiges Tool, es funktioniert nicht innerhalb von FB * triggers *, was ein DB-interner Prozess ist –