oracle数据导出成文本文件的一个案例(XYPJ of JLBK)

1、 程序目录结构

/home/oracle/IRS_OUT/.(根目录)

                       IRS_DATA_OUT_CTL.sh

                       yesterday.sh

                      

                     ├─OUT_DATA(生成的数据文件路径)

                           IRS_CUSTOMER_20101111.dat

                           IRS_CUST_RATING_RESULT_20101111.dat

                           IRS_DEBT_RATING_RESULT_20101111.dat

                           ............

                     ├─RUN_LOG(日志路径)

                           IRS_OUT_20101111.log

                           ............

                     └─SQL_SHELL(批程序及spool语句路径)

                             batch_CUSTOMER.sh

                             batch_CUST_RATING_RESULT.sh

                             batch_DEBT_RATING_RESULT.sh

                             ............

                             spool_CUSTOMER.sql

                             spool_CUST_RATING_RESULT.sql

                             spool_DEBT_RATING_RESULT.sql

                             ............

2、 取昨天日期函数的shell

Cat yesterday.sh

 #!/bin/bash # Var Declare #!/bin/sh # ydate: A Bourne shell script that # prints yestarday's date # Output Form: Month Day Year # Set the current month day and year. month=`date +%m` day=`date +%d` year=`date +%Y` # Add 0 to month. This is a # trick to make month an unpadded integer. month=`expr $month + 0` # Subtract one from the current day. day=`expr $day - 1` # If the day is 0 then determine the last # day of the previous month. if [ $day -eq 0 ]; then # Find the preivous month. month=`expr $month - 1` # If the month is 0 then it is Dec 31 of # the previous year. if [ $month -eq 0 ]; then month=12 day=31 year=`expr $year - 1` # If the month is not zero we need to find # the last day of the month. else case $month in 1|3|5|7|8|10|12) day=31;; 4|6|9|11) day=30;; 2) if [ `expr $year % 4` -eq 0 ]; then if [ `expr $year % 400` -eq 0 ]; then day=29 fi else day=28 fi ;; esac fi fi echo $year${month}${day}

3、 总控调度程序

Cat IRS_DATA_OUT_CTL.sh

 export yesterday=`sh /home/oracle/IRS_OUT/yesterday.sh` export cur_time=`date '+%Y%m%d %T'` echo 当前时间是[$cur_time],开始[$yesterday]数据的卸载...>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log echo 开始删除/home/oracle/IRS_OUT/OUT_DATA/目录下的上日存留数据!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log rm /home/oracle/IRS_OUT/OUT_DATA/IRS_* echo 开始数据卸载的跑批...>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log sh /home/oracle/IRS_OUT/SQL_SHELL/batch_CUSTOMER.sh echo 表CUSTOMER的[$yesterday]数据卸载完成!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log sh /home/oracle/IRS_OUT/SQL_SHELL/batch_CUST_RATING_RESULT.sh echo 表CUST_RATING_RESULT的[$yesterday]数据卸载完成!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log sh /home/oracle/IRS_OUT/SQL_SHELL/batch_DEBT_RATING_RESULT.sh echo 表DEBT_RATING_RESULT的[$yesterday]数据卸载完成!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log sh /home/oracle/IRS_OUT/SQL_SHELL/batch_ENT_CADRE_BLANCE_SHEET_NEW.sh echo 表ENT_CADRE_BLANCE_SHEET_NEW的[$yesterday]数据卸载完成!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log sh /home/oracle/IRS_OUT/SQL_SHELL/batch_ENT_CADRE_BLANCE_SHEET_OLD.sh echo 表ENT_CADRE_BLANCE_SHEET_OLD的[$yesterday]数据卸载完成!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log sh /home/oracle/IRS_OUT/SQL_SHELL/batch_ENT_CADRE_CASH_FLOW_NEW.sh echo 表ENT_CADRE_CASH_FLOW_NEW的[$yesterday]数据卸载完成!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log sh /home/oracle/IRS_OUT/SQL_SHELL/batch_ENT_CADRE_CASH_FLOW_OLD.sh echo 表ENT_CADRE_CASH_FLOW_OLD的[$yesterday]数据卸载完成!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log sh /home/oracle/IRS_OUT/SQL_SHELL/batch_ENT_CADRE_INCOME_ACC_NEW.sh echo 表ENT_CADRE_INCOME_ACC_NEW的[$yesterday]数据卸载完成!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log sh /home/oracle/IRS_OUT/SQL_SHELL/batch_ENT_CADRE_INCOME_ACC_OLD.sh echo 表ENT_CADRE_INCOME_ACC_OLD的[$yesterday]数据卸载完成!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log sh /home/oracle/IRS_OUT/SQL_SHELL/batch_ENT_UNIT_BLANCE_SHEET_NEW.sh echo 表ENT_UNIT_BLANCE_SHEET_NEW的[$yesterday]数据卸载完成!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log sh /home/oracle/IRS_OUT/SQL_SHELL/batch_ENT_UNIT_BLANCE_SHEET_OLD.sh echo 表ENT_UNIT_BLANCE_SHEET_OLD的[$yesterday]数据卸载完成!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log sh /home/oracle/IRS_OUT/SQL_SHELL/batch_ENT_UNIT_CASH_FLOW_NEW.sh echo 表ENT_UNIT_CASH_FLOW_NEW的[$yesterday]数据卸载完成!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log sh /home/oracle/IRS_OUT/SQL_SHELL/batch_ENT_UNIT_CASH_FLOW_OLD.sh echo 表ENT_UNIT_CASH_FLOW_OLD的[$yesterday]数据卸载完成!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log sh /home/oracle/IRS_OUT/SQL_SHELL/batch_ENT_UNIT_INCOME_ACC_NEW.sh echo 表ENT_UNIT_INCOME_ACC_NEW的[$yesterday]数据卸载完成!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log sh /home/oracle/IRS_OUT/SQL_SHELL/batch_ENT_UNIT_INCOME_ACC_OLD.sh echo 表ENT_UNIT_INCOME_ACC_OLD的[$yesterday]数据卸载完成!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log sh /home/oracle/IRS_OUT/SQL_SHELL/batch_LOAN_CONTRACT.sh echo 表LOAN_CONTRACT的[$yesterday]数据卸载完成!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log sh /home/oracle/IRS_OUT/SQL_SHELL/batch_UT_BLANCE_SHEET.sh echo 表UT_BLANCE_SHEET的[$yesterday]数据卸载完成!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log echo 开始将DAT文件传送到目标机器!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log ftp -n<<! open 10.172.45.5 user dft_user dft_user prompt off bin cd /ODS-DATA/UPLOAD/DFT lcd /home/oracle/IRS_OUT/OUT_DATA/ mput IRS_* quit ! echo DAT文件传送完成,跑批正常结束!>>/home/oracle/IRS_OUT/RUN_LOG/IRS_OUT_$yesterday.log echo DAT文件传送完成,跑批正常结束!

4、 批调度处理程序示例

Cat batch_CUSTOMER.sh

 export yesterday=`sh /home/oracle/IRS_OUT/yesterday.sh` sqlplus IRSADMIN/IRSADMIN @/home/oracle/IRS_OUT/SQL_SHELL/spool_CUSTOMER.sql mv /home/oracle/IRS_OUT/OUT_DATA/IRS_CUSTOMER.dat /home/oracle/IRS_OUT/OUT_DATA/IRS_CUSTOMER_$yesterday.dat

5、 Spool程序示例

Cat spool_CUSTOMER.sql

 set echo off set feedback off set trimspool on set linesize 5000 set pagesize 0 set newpage 0 set heading off set term off set termout off set timing off set verify off spool /home/oracle/IRS_OUT/OUT_DATA/IRS_CUSTOMER.dat; SELECT CUST_ID || '|' || TO_CHAR(CREATE_TIME, 'YYYY-MM-DD HH24:MI:SS') || '|' || CUST_NAME || '|' || POINT_CMIS_ID || '|' || CUST_ORG_CODE || '|' || REG_ADDRESS || '|' || BELONG_INDUSTRY || '|' || INDUSTRY_CODE || '|' || IS_LOW_RISK || '|' || IS_SUPPLY_CHAIN || '|' || IS_PROJECT_FINANCING || '|' || ENP_PROP || '|' || IS_TRADE_FINANCING || '|' || IS_PURE_ASSURER || '|' || EMP_NUM || '|' || SALES_INCOMING || '|' || ASSET_AMOUNT || '|' || CUST_STATUS || '|' || CUST_TYPE || '|' || ZJ_TYPE || '|' || ZJ_NO || '|' || JBJG_NO || '|' || MAIN_CUST_MANAGER || '|' || AREA || '|' || PROP_ATTRIBUTE || '|' || IS_GOV_FINANCING_PLATFORM FROM CUSTOMER; spool off; exit;

6、 输出日志文件样式

Cat IRS_OUT_20101111.log

 当前时间是[20101112 11:06:37],开始[20101111]数据的卸载... 开始删除/home/oracle/IRS_OUT/OUT_DATA/目录下的上日存留数据! 开始数据卸载的跑批... 表CUSTOMER的[20101111]数据卸载完成! 表CUST_RATING_RESULT的[20101111]数据卸载完成! 表DEBT_RATING_RESULT的[20101111]数据卸载完成! 表ENT_CADRE_BLANCE_SHEET_NEW的[20101111]数据卸载完成! 表ENT_CADRE_BLANCE_SHEET_OLD的[20101111]数据卸载完成! 表ENT_CADRE_CASH_FLOW_NEW的[20101111]数据卸载完成! 表ENT_CADRE_CASH_FLOW_OLD的[20101111]数据卸载完成! 表ENT_CADRE_INCOME_ACC_NEW的[20101111]数据卸载完成! 表ENT_CADRE_INCOME_ACC_OLD的[20101111]数据卸载完成! 表ENT_UNIT_BLANCE_SHEET_NEW的[20101111]数据卸载完成! 表ENT_UNIT_BLANCE_SHEET_OLD的[20101111]数据卸载完成! 表ENT_UNIT_CASH_FLOW_NEW的[20101111]数据卸载完成! 表ENT_UNIT_CASH_FLOW_OLD的[20101111]数据卸载完成! 表ENT_UNIT_INCOME_ACC_NEW的[20101111]数据卸载完成! 表ENT_UNIT_INCOME_ACC_OLD的[20101111]数据卸载完成! 表LOAN_CONTRACT的[20101111]数据卸载完成! 表UT_BLANCE_SHEET的[20101111]数据卸载完成! 开始将DAT文件传送到目标机器! DAT文件传送完成,跑批正常结束!

7、 总结说明:

(1)ftp模式下,并没有rm命令的,而是有与之相对应deletemdelete命令,不可混淆。

(2)、在进行mput的时候,一定要进入到本地的源目录及远端的目的目录,如:

ftp -n<<!

open 10.172.45.5

user dft_user dft_user

prompt off

bin

cd /ODS-DATA/UPLOAD/DFT

lcd /home/oracle/IRS_OUT/OUT_DATA/

mput IRS_*

quit

!

而不可:

mput /home/oracle/IRS_OUT/OUT_DATA/IRS_*

这样的话,ftpmput就回报错。

(3)、计算当前时间的时候,如果想让显示的时间标准化,可以如下格式:

export cur_time=`date '+%Y%m%d %T'`

(4)、本次spool导出,采用坚线分隔符形式;此方式的好处是,简单易用,数据文件占用空间小。

(5)oracle数据导出,还可以采用另一种方式,采用UTL_FILE包来导出。

你可能感兴趣的:(oracle数据导出成文本文件的一个案例(XYPJ of JLBK))