【问题标题】:Output CSV file with trigger in Firebird在 Firebird 中输出带有触发器的 CSV 文件
【发布时间】: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 文件。

标签: csv firebird firebird2.5 ibexpert


【解决方案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 内部进程
    猜你喜欢
    • 1970-01-01
    • 2021-03-16
    • 2023-03-28
    • 1970-01-01
    • 2015-04-06
    • 2015-10-09
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多