在 Firebird 中输出带有触发器的 CSV 文件
Posted
技术标签:
【中文标题】在 Firebird 中输出带有触发器的 CSV 文件【英文标题】:Output CSV file with trigger in Firebird 【发布时间】:2017-04-13 18:34:48 【问题描述】:是否可以创建一个触发器,在表 2 更新后立即输出 CSV 文件,从表 1 中选择字段 1?
我尝试过使用
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
【问题讨论】:
你可以尝试通过外部表来完成,如果你能保证所有的行在字符中具有完全相同的预定义长度并填充太短的线并剪掉太长的线。但是强制内部数据库内部进程依赖于外部条件(如写入 CSV 文件)的想法是一个非常糟糕的想法。制作您的触发器问题事件,并制作一个独立的守护程序,等待这些事件,然后创建这些 CSV 文件。 【参考方案1】:不,这不可能在 Firebird 2.5 的触发器中输出到 CSV 文件。如果要输出到文件,则需要在客户端应用程序中执行此操作,或者使用外部表(技术上是二进制格式,而不是文本格式)。可以使用 UDF 创建一个复杂的解决方案。
在 Firebird 3 中,使用 UDR(用户定义的例程)可能会获得更简单的解决方案,但这在很大程度上是未知领域,因此我实际上不确定是否可以这样做。
【讨论】:
【参考方案2】:我想你可以使用 IBExpert 工具 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
【讨论】:
Interbase Expert 是一个独立的工具,它不能在 FB triggers 中工作,它是 DB 内部进程以上是关于在 Firebird 中输出带有触发器的 CSV 文件的主要内容,如果未能解决你的问题,请参考以下文章