使用Shell脚本进行参数化以从Oracle表动态生成提取文件

时间:2018-06-28 21:34:28

标签: shell dynamic

我有一个需求,我需要进行参数化以通过UNIX Shell脚本从多个Oracle表生成一个提取文件。     这是我编写的用于生成一个制表符分隔文件的脚本,该文件将从EMPLOYEE表中获取所有数据。     我需要参数化TABLE_NAME,OWNER_NAME,USERNAME,PASSWORD和HOST才能从另外12个表中生成。     因此,我只想使用一个SQL通过在执行脚本时传递这些参数值来生成12个表的摘要。     您能否给我演示如何在脚本执行过程中修改下面的脚本以及如何传递参数。

第二个要求是基于列(例如ETL_UPDATE_TS)递增生成文件。你能告诉我这个吗?

示例脚本

#!/usr/bin/ksh
TD=/mz/mz01/TgtFiles
MD=/mz/mz01/Scripts
#CAQH_Server=sftp.org
#UN=user
#PWD=password
#RD=Incoming
#RD=/home/

cd $TD

FILE="EMPLOYEE.TXT"

sqlplus -s scott/tiger@db  <<EOF

SET PAGES 999
SET COLSEP "    "
SET LINES 999
SET FEEDBACK OFF

SPOOL $FILE

SELECT * FROM EMP;

SPOOL OFF
EXIT
EOF

1 个答案:

答案 0 :(得分:1)

以与处理$ FILE变量类似的方式处理参数,并将其作为选项传递给脚本

#!/usr/bin/ksh
TD=/mz/mz01/TgtFiles
MD=/mz/mz01/Scripts

cd $TD
FILE="undefined"
TABLE="undefined"
while getopts :f:t: opt
do
        case $opt in
                f)      FILE=${OPTARG} ;;
                t)      TABLE=${OPTARG} ;;
                *)      echo "invalid flag" ;;
        esac
done

if [ "$TABLE" == "undefined" ]; then
    echo "ERROR. TABLE is undefined, use -f option."
    exit 1
fi
# More required variables checks here

# create more options to parameterize connection
sqlplus -s scott/tiger@db  <<EOF

SET PAGES 999
SET COLSEP "    "
SET LINES 999
SET FEEDBACK OFF

SPOOL $FILE

SELECT * FROM $TABLE;

SPOOL OFF
EXIT
EOF

将其执行为

my_script.sh -f "EMPLOYEE.TXT" -t "EMP"