我正在尝试编写一个unix程序,我需要连接到SQL DB并获取数据并将其存储到文件中。
目前我正在使用以下命令:
output1=`sqlplus -s username@SID/password <<EOF
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING ON ECHO OFF;
SPOOL EMP_NAMES.txt
select emp_name from employee order by emp_name;
Spool off;
这很好用。但我的要求是我想传递假脱机文件的值,这样每次都会生成一个新的假脱机文件。
我基本上想在文件名的末尾添加日期,如:
date=`date +'%d/%m/%Y_%H:%M:%S:%2N'`
output1=`sqlplus -s username@SID/password <<EOF
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING ON ECHO OFF;
SPOOL EMP_NAMES_$date.txt
请告诉我如何做到这一点。
答案 0 :(得分:1)
如果您使用heredoc拨打sqlplus
,则可以轻松完成此操作:
spool_file=: ... your date logic here ...
sql_ouput=: ... path for sqlplus output & errors ...
sqlplus -s username@SID/password << EOF &> "$sql_output"
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING ON ECHO OFF;
spool $spool_file
# SQL statements
spool off
EOF
if [[ $? != 0 ]]; then
: ... error handling ...
fi
sqlplus
的stdout / stderr捕获到文件而不是shell变量中。ps
中)看一下这篇相关文章:Connect to sqlplus in a shell script and run SQL scripts