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

来源:互联网 发布:男士脸型与发型知乎 编辑:程序博客网 时间:2024/06/10 20:19
                     **自动保存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/state2   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;
原创粉丝点击