论将数据库中的数据导出为dat格式

一、写作目的:

在生产过程中,往往需要将数据库中的某个表或者视图中的数据导出为某固定格式的文本文件,如txt、dat或xls等格式。本文以导出dat文件为例,详述在EBS环境中,如何根据客户需求将数据库中满足条件的的数据导出为dat文件。

二、客户需求:

财务系统每日向ODS系统提供债券模块信息表XXBOCQ_BND_BOOK_B全量数据,保留原格式,不做任何筛选转换调整。

1、文件命名和格式:

格式: dat文件、ok文件和tar文件。

命名: XXBOCQ_BND_BOOK_B.dat和finish_日期.ok(如:finishok)和fin_日期.tar (如:fintar);

注:dat文件为全量数据文件,每个字段之间以“|”隔开,并且每行数据结尾以“|”结尾。ok文件为生成dat文件后生成的就绪文件。tar文件为将dat文件打包后的文件数据库当前日期。

2、文件存放路径:

应用服务器的/ebsap/appl/outpathfile路径下,如果没有ODSFile目录,则创建ODSFile目录,每日在ODSFile目录下,创建以当日日期为名称的目录,存放dat文件,ok文件以及tar文件。

3、文件字符集:

传输文件采用GBK字符集编码。

三、实现思路:

整体思路:先通过提交EBS请求来生成dat文件和ok文件,然后再通过一个请求将生成的dat文件打包,并在固定的路径下生成目标目录,并将tar文件移动到目标路径。

第一步:先生成dat文件。有两种生成dat文件方式:

1:通过oracle的spool命令,生成dat文件。

2:通过oracle的utl_file包生成dat文件。

下面两种方法都做一介绍。

第二步:生成tar文件,并移动至目标路径。通过shell编程,将文件tar包并移动。

四、实现方法:

A、通过spool命令生成dat文件。

1、spool简介:通过spool 命令,可以将select 数据库的内容写到文件中,通过在sqlplus设置一些参数,使得按指定方式写到文件中。

spool命令的语法如下:

spool [file_name [create|replace|append] off|out]

其中file_name指定一个操作系统文件

create将创建一个指定的file_name文件

replace如果指定的文件已经存在,则替换该文件

append将内容附加到一个已经存在的文件中

off停止将sql*plus中的输出结果复制到file_name文件中,并关闭该文件。

out启动该功能,将sql*plus中的输出结构复制到file_name中。

2.spool常用的设置

set colsep' '; //域输出分隔符

set echo off;    //显示start启动的脚本中的每个sql命令,缺省为on

set feedback off;  //回显本次sql命令处理的记录条数,缺省为on

set heading off;   //输出域标题,缺省为on

set pagesize 0;   //输出每页行数,缺省为24,为了避免分页,可设定为0

set termout off;   //显示脚本中的命令的执行结果,缺省为on

set trimout on;   //去除标准输出每行的拖尾空格,缺省为off

set trimspool on;  //去除重定向(spool)输出每行的拖尾空格,缺省为off

输出文本数据的建议格式: SQL*PLUS环境设置

SET NEWPAGE NONE

SET HEADING OFF

SET SPACE 0

SET PAGESIZE 0

SET TRIMOUT ON

SET TRIMSPOOL ON

SET LINESIZE 2500 此值根据具体数据情况设定,太小易被截断,太大会降低导出的速度。

3、编写shell脚本生成dat文件。脚本文件为XXBOCQ.prog文件,将其挂一个EBS请求,通过EBS请求来执行其中的内容,主要生成XXBOCQ_BND_BOOK_B.dat文件。

XXBOCQ.prog脚本如下:

LOGIN=${1}

FND=${5}

YJH=${6}

DATE=${7}

echo "login:${LOGIN}"

echo "filename:${FND}"

echo "okname:${YJH}"

echo "date:${DATE}"

export NLS_LANG=American_America.ZHS16GBK

cd /ebsap/appl/outfilep