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

环境:

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;
时间: 2024-08-04 22:34:44

oracle 使用 UTL_FILE 导出表数据到txt文件的相关文章

sql server导出表数据(TXT文件)

EXEC master..xp_cmdshell 'bcp "select * from HANSUI.dbo.SRB在庫マスタ" queryout "F:\share\test_jwj\tt.txt" -c -S"172.16.1.1" -U"sa" -P"[email protected]"' EXEC sp_configure 'show advanced options',1; RECONFIGUR

【应用】:shell crontab定时生成oracle表的数据到txt文件,并上传到ftp

一.本人环境描述      1.oracle服务端装在win7 32位上,oracle版本为10.2.0.1.0      2.Linux为centos6.5 32位,安装在Oracle VM VirtualBox虚拟机上      3.win7上装有ftp服务 二.功能实现描述      用shell的crontab命令定时执行某个.sh文件,此文件的功能已实现生成oracle表的数据到本地txt文件,并上传到ftp,必要时可记录执行日志. 三.步骤      1.在centos中安装orac

oracle中把表导出为txt文件方法

本篇列举了几种把oracle 表中的数据导出成txt文件的方法,目前只列举了三种方式,如果后续发现更好的方法会持续添加进来. 1.plsqldev 里面有一个选项可以把表以execl格式到时 2.使用spool sqlplus / as sysdba set linesize 1000 set pagesize 0 set echo off set termout off set heading off set feedback off SET trims ON set term off SET

使用sqlldr向Oracle导入大的文本(txt)文件

我们有多种方法可以向Oracle数据库里导入文本文件,但如果导入的文本文件过大,例如5G,10G的文本文件,有些方法就不尽如意了,例如PLSQL Developer中的导入文本功能,如果文本文件过大,不仅导入速度太慢,中间还容易出错.这时Sqlldr就能大显身手了,Sqlldr可以每秒向Oracle插入5W条数据,可以自定义控制文件,进行导入控制,而且导入过程不易出错,下面简易记录导入过程. 1.Sqlldr导入控制文件说明 1 load data 2 infile '/home/oracle/

oracle/mysql 将查询数据导出到文件中

一.将oracle 查询的数据导入到一个文本文件中方法一 :通过sql developer 工具导出到xls表中方法二:通过客户端sqlplus 到一个临时txt文件中再处理着重讲方法二(在使用场景下方便.快捷)SQL>spool d:sqlbak.txt;SQL>select * from table where a>x;SQL>spool off;这样刚查询的数据就好在d盘下的 sqlbak.txt 文件中,linux下同理: spool /tmp/sqlbak.txt 二.

批量导出表数据到CSV文件

需求:把oracle数据库中符合条件的N多表.导出成csv文本文件.并以表名.csv为文件名称存放. 实现:通过存储过程中UTL_FILE函数来实现.导出的csv文件放入提前创建好的directory中. 用法:使用下面命令数据预运行的SQL脚本 SELECT 'EXEC sql_to_csv(''select * from ' ||T.TABLE_NAME || ''',''OUT_PUT_CSV''' || ',''ODS_MDS.' || T.TABLE_NAME || '.csv'');

oracle学习之数据库数据保存成文件

常常需要将数据库中的数据生成文档,由于比较喜欢脚本的方式,所以就需要使用spool的时候进行格式设置,以下简单整理了一下oracle中进行格式设置的一些东西,一共十八条,其实常用的也就那么几个,稍后会附上自己写的简单的shell操作的脚本,希望能供同样有需要的共同交流,也作为自己的备份. set命令的各项及其含义:arraysize 从数据库中一次提取的行数,默认为15autocommit 是否自动提交,默认为offcolsep 在选定列之间的分隔符,默认为空格echo 在用start命令执行一

python 写数据到txt 文件

# coding=utf-8 import codecs # list = [[1,2],[3,4]] list = ['{"PN":"34VT123","DUID":"XXXX","location":{"coordinates":[-100.35256443,33.4586858]},"SPD":125,"DT":"2017-06-0

php写入数据到txt文件

<form action="index.php" method="post"> <input type="text" name="user"/> <input type="text" name="password"/> <input type="submit" value="submit"/> <