oracle 导出表数据txt,oracle 使用 UTL_FILE 导出表数据到txt文件

该博客介绍了如何在RedHat Enterprise Linux Server 6.6上使用Oracle Database 11g创建目录,编写存储过程,将数据从applljkll表导出到TXT_DIR目录下的applljkll.txt文件。过程中遇到了文件写入错误,通过调整utl_file.fopen的max_linesize参数解决了问题。
摘要由CSDN通过智能技术生成

环境:

Red Hat Enterprise Linux Server release 6.6

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

--创建目录

create or replace directory TXT_DIR as '/opt/oracle/database/exptxt';

grant read,write on directory TXT_DIR to manager_desk;

--编写存储过程,并存入文件/home/oracle/detail.sql

create or replace PROCEDURE appdetail

is

file_handle utl_file.file_type;

Write_content VARCHAR2(5000);

v_DETAILID        NUMBER;

v_APPID           NUMBER;

v_APPVER          NUMBER;

v_APPVERNAME      VARCHAR2(254);

v_PACKAGENAME     VARCHAR2(254);

v_CRC32           VARCHAR2(20);

v_ICON            VARCHAR2(254);

v_DESCRIPTION     CLOB;

v_CSIZE           NUMBER;

v_PAYTYPE         NUMBER;

v_COST            NUMBER(25,3);

v_STATE           NUMBER;

v_CREATORID       NUMBER;

v_MODDATE         DATE;

v_APPPATH         VARCHAR2(500);

v_ISDEF           NUMBER;

v_DOWNLOADCOUNT   NUMBER;

v_COOPERATIONID   NUMBER;

v_REALAPPID       NUMBER(38);

v_CREATEDATE      DATE;

v_ISADVERTISER    NUMBER(38);

v_EDITOR          NUMBER;

v_ISGETDATA       NUMBER;

v_SECURITYSTATUS  NUMBER;

v_ADTYPES         NUMBER;

v_PERMISSIONLEVEL NUMBER;

v_VERIFIED        NUMBER;

v_BOTTOMDESC      VARCHAR2(512);

v_SIGNATUREMD5    VARCHAR2(64);

v_APKMD5          VARCHAR2(64);

v_MINVERSIONCODE  NUMBER(38);

v_PCLASSID        NUMBER(38);

v_CLASSID         NUMBER(38);

cursor cur_sp_out

is

select detailid, appid, appver, appvername, packagename, crc32, icon, description, csize, paytype, cost, state, creatorid, moddate, apppath, isdef, downloadcount, cooperationid, realappid, createdate, isadvertiser, editor, isgetdata, securitystatus, adtypes, permissionlevel, verified, bottomdesc, signaturemd5, apkmd5, minversioncode, pclassid, classid from applljkll;

begin

open cur_sp_out;

loop

fetch cur_sp_out into v_detailid, v_appid, v_appver, v_appvername, v_packagename, v_crc32, v_icon, v_description, v_csize, v_paytype, v_cost, v_state, v_creatorid, v_moddate, v_apppath, v_isdef, v_downloadcount, v_cooperationid, v_realappid, v_createdate, v_isadvertiser, v_editor, v_isgetdata, v_securitystatus, v_adtypes, v_permissionlevel, v_verified, v_bottomdesc, v_signaturemd5, v_apkmd5, v_minversioncode, v_pclassid, v_classid;

exit when cur_sp_out%notfound;

file_handle := utl_file.fopen('TXT_DIR','applljkll.txt','a',32000);

--specified  directories ,file_name and max_linesize

write_content := v_detailid||', '||v_appid||', '||v_appver||', '||v_appvername||', '||v_packagename||', '||v_crc32||', '||v_icon||', '||v_description||', '||v_csize||', '||v_paytype||', '||v_cost||', '||v_state||', '||v_creatorid||', '||v_moddate||', '||v_apppath||', '||v_isdef||', '||v_downloadcount||', '||v_cooperationid||', '||v_realappid||', '||v_createdate||', '||v_isadvertiser||', '||v_editor||', '||v_isgetdata||', '||v_securitystatus||', '||v_adtypes||', '||v_permissionlevel||', '||v_verified||', '||v_bottomdesc||', '||v_signaturemd5||', '||v_apkmd5||', '||v_minversioncode||', '||v_pclassid||', '||v_classid;

--write file

IF utl_file.is_open(file_handle) THEN

utl_file.put_line(file_handle,write_content);

END IF;

--close file

utl_file.fclose(file_handle);

end loop;

close cur_sp_out;

end;

/

执行:

SQL>  @/home/oracle/base.sql

Procedure created.

SQL> exec appdetail;

PL/SQL procedure successfully completed.

处错:

SQL> exec appbase

BEGIN appbase; END;

*

ERROR at line 1:

ORA-29285: file write error

ORA-06512: at "SYS.UTL_FILE", line 77

ORA-06512: at "SYS.UTL_FILE", line 690

ORA-06512: at "MANAGER_DESK.APPBASE", line 55

ORA-06512: at line 1

解决:

修改

max_linesize 为 3200;

file_handle := utl_file.fopen('TXT_DIR','qn_desktop_appdetail.txt','a',32000);

注:如果不知道max_linesize,其默认值为1024;

utl_file 子过程 fopen语法:

Syntax

UTL_FILE.FOPEN (

location     IN VARCHAR2,

filename     IN VARCHAR2,

open_mode    IN VARCHAR2,

max_linesize IN BINARY_INTEGER)

RETURN file_type;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值