从shell脚本将假脱机文件的名称传递给sqlplus

时间:2017-02-01 07:38:15

标签: linux oracle bash shell unix

我正在尝试编写一个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

请告诉我如何做到这一点。

1 个答案:

答案 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变量中。
  • 我认为可以通过从命令行中删除密码并将其添加为heredoc的第一行来隐藏密码(这将阻止密码显示在ps中)

看一下这篇相关文章:Connect to sqlplus in a shell script and run SQL scripts