暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 基于数据集的触发器

askTom 2017-02-20
192

问题描述

大家好,
我有一个场景,我想创建一个触发器,它将生成一个平面文件,每当一组数据,如部门编号 (10,20,30,40,50...) 在特定日期 (sysdate) 更改 (插入/更新)。

专家解答

您不想直接从触发器执行此操作,因为有人可能会回滚事务-但您不能回滚平面文件写入。

所以你会这样做:

a) 触发器通过dbms_job提交作业
b) 提交将激活作业
c) 作业将执行所需的步骤,例如utl_file。

SQL> create table t ( deptno int );

Table created.

SQL>
SQL> create or replace
  2  procedure unload_Data is
  3    l_file         utl_file.file_type;
  4    l_dir          varchar2(100) := 'TEMP';
  5    l_filename     varchar2(100) := 'myfile.dat';
  6  begin
  7    l_file := utl_file.fopen(l_dir, l_filename, 'w');
  8    utl_file.put_line(l_file, 'Here is some data');
  9    utl_file.fclose(l_file);
 10  end;
 11  /

Procedure created.

SQL>
SQL> create or replace
  2  trigger t_trg
  3  after insert on t
  4  for each row
  5  declare
  6    j int;
  7  begin
  8    dbms_job.submit(j, 'unload_data;');
  9  end;
 10  /

Trigger created.

SQL>
SQL> insert into t values (10);

1 row created.

SQL> commit;

Commit complete.


SQL> host dir c:\temp\myfile.dat
 Volume in drive C is System
 Volume Serial Number is 7AD7-C05A

 Directory of c:\temp

20/02/2017  09:31 PM                19 myfile.dat
               1 File(s)             19 bytes
               0 Dir(s)  45,458,391,040 bytes free

SQL>
复制


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论