Oracle自动导出并存储为txt数据文件(存储过程)

                     **自动保存txt数据文件存储过程**

create or replace directory MY_DIR_MOBILE as ‘E:\DATA\’;
grant read,write on directory MY_DIR_MOBILE to zysms;–授权给zysms用户

select * from dba_directories;

查询结果:
1   SYS ORACLE_OCM_CONFIG_DIR   D:\app\Administrator\product\11.2.0\dbhome_1/ccr/state
2   SYS DATA_PUMP_DIR   D:\app\Administrator/admin/orcl/dpdump/
3   SYS MY_DIR_MOBILE   E:\DATA\
4   SYS XMLDIR  c:\ade\aime_dadvfh0169\oracle/rdbms/xml

使用utl_file写出文件,通过查询库中内容,写出到指定服务器路径下,总体过程如下:
(1)通过UTL_FILE.FOPEN方法找到对应路径,创建文件,并且给出写入规则。
(2)通过UTL_FILE.PUT_LINE方法向文件中写入内容(UTL_FILE.PUT_LINE写入VARCHAR2类型数据,UTL_FILE.PUT_RAW方法是写入RAW类型的数据,一般来说RAW容量更大,用的更加广泛),这里由于ORACLE有长度限制,一般采用循环方式分批写入。
(3)写入完成后,通过UTL_FILE.FCLOSE方法关闭文件,结束写出。

CREATE OR REPLACE PROCEDURE Mobile_Write_Txt IS
       export_mobile UTL_FILE.file_type;
       strs_sql varchar(60);
       strs_yymmdd varchar2(20);----当前时间格式2017-11-26
       var_sql varchar(60);
       var_yymmdd varchar2(20);----加一天时间格式2017-11-27
       BEGIN
          strs_sql:='select to_char(sysdate,'||'''yyyy-mm-dd'''||')from dual';
          var_sql:='select to_char(sysdate+1,'||'''yyyy-mm-dd'''||')from dual';
          execute immediate strs_sql into strs_yymmdd;----时间格式2017-11-26
          execute immediate var_sql into var_yymmdd;----加一天时间格式2017-11-27
         export_mobile := UTL_FILE.FOPEN('MY_DIR_MOBILE', strs_yymmdd||'.txt', 'w');--定义写入规则
          UTL_FILE.PUT_LINE(export_mobile,'MSISDN');--MSISDN为msg_details字段名,多个字段时使用英文逗号','隔开
           FOR x IN (select t.msisdn from msg_details t where t.sendtime>to_date('2017-11-26 00:00:00','yyyy-MM-dd hh24:mi:ss')and t.sendtime<to_date('2017-11-27 00:00:00','yyyy-MM-dd hh24:mi:ss')) LOOP
             UTL_FILE.PUT_LINE(export_mobile,x.msisdn);
          END LOOP;
          UTL_FILE.FCLOSE(export_mobile);--写入完成关闭
          EXCEPTION
          WHEN OTHERS THEN
          DBMS_OUTPUT.PUT_LINE(SUBSTR(SQLERRM, 1, 2000));
END;
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值