在 unix 脚本中调用 PL/SQL 块

Call PL/SQL block in unix script

我正在尝试使用 sqlplus 在 unix 脚本中调用 pl/sql 块。我刚刚尝试打印一个声明,但没有打印任何内容,我也没有收到任何错误。

Result=`sqlplus -s $TgtUsrID/$TgtPswd@$TgtServer <<eof
whenever sqlerror exit sql.sqlcode;
SET SERVEROUTPUT ON;
BEGIN
   DBMS_OUTPUT.PUT_LINE('Hello World!');
END;
eof
`
current_time=`date`
echo " Script execution   finished at $current_time"

只需要在最后一个 EOF 之后用美元运算符添加变量 (Result) 连同 echo 命令,例如

Result=`sqlplus -S /nolog << EOF
 conn $TgtUsrID/$TgtPswd@$TgtServer
 whenever sqlerror exit sql.sqlcode
 set feedback off

 SET SERVEROUTPUT ON;
 BEGIN
   DBMS_OUTPUT.PUT_LINE('Hello World!');
 END;
 /
EOF`

echo $Result    
echo Script execution finished at $(date)

会产生这样的结果

Hello World!
Script execution finished at Tue Feb 14 00:15:51 +03 2021

其中最后一个 echo 之后的描述引号是多余的,并且更喜欢使用与 /nolog 的连接更安全,因为只要 ps -ef 就会公开模式的密码当前案例发出的命令。