Triggers Oracle 10g写入触发器时出现问题,该触发器将创建包含表中数据内容的CSV文件

Triggers Oracle 10g写入触发器时出现问题,该触发器将创建包含表中数据内容的CSV文件,triggers,oracle10g,Triggers,Oracle10g,如何编写在更新表中的特定列并创建具有相同表内容的文件后调用的触发器 我正在使用 在中,应该这样做(当然,首先修改以适合您的表/列): 您想将csv文件写入到哪里?抱歉,但我认为这是一个非常糟糕的主意。您可能会遇到许多问题,必须解决这些问题-例如:(a)如果用户执行更新,但随后回滚,则将使用表中不存在的数据创建csv文件;(b)在某些情况下(由于锁定问题),如果跨表中的多行运行更新,触发器可能会运行多次(Oracle可能必须回滚并重新启动)。t、 b.c.更好的方法可能是有一个流程,该流程检测表的

如何编写在更新表中的特定列并创建具有相同表内容的文件后调用的触发器

我正在使用

中,应该这样做(当然,首先修改以适合您的表/列):


您想将csv文件写入到哪里?抱歉,但我认为这是一个非常糟糕的主意。您可能会遇到许多问题,必须解决这些问题-例如:(a)如果用户执行更新,但随后回滚,则将使用表中不存在的数据创建csv文件;(b)在某些情况下(由于锁定问题),如果跨表中的多行运行更新,触发器可能会运行多次(Oracle可能必须回滚并重新启动)。t、 b.c.更好的方法可能是有一个流程,该流程检测表的更改,然后写入csv文件,即提交更改后。另一种方法是使用一个从触发器更新的外部表,这样Oracle将在必要时处理文件写入/更新。+1我很少看到人们从粘贴答案的地方实际引用该表。你真好。!
CREATE [OR REPLACE] TRIGGER trigger_name

{BEFORE/AFTER/INSTEAD OF}triggering_event

[WHEN trigger_condition]

[FOR EACH ROW]

trigger_body;
create or replace trigger create_csv
after update on table_name for each row
declare
  file_handle text_io.file_type;
  cursor c_table_name is
    select foo, bar, baz
      from table_name
  ;
begin
  file_handle := text_io.fopen('path/to/csv/file');
  for table_row in c_table_name loop
    text_io.put_line(
      file_handle,
      replace(table_row.foo, ',', '\,')||','||
      replace(table_row.bar, ',', '\,')||','||
      replace(table_row.baz, ',', '\,')
    );
  end loop;
  text_io.fclose(file_handle);
end;