我有一个需求,我需要进行参数化以通过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
答案 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"