这是我的sqlplus脚本:
sqlplus <<EOF>> $LOGFILE $USER_NAME_PASSWORD
WHENEVER SQLERROR EXIT SQL.SQLCODE
spool $LOGFILE
set serveroutput on size 20000
show serveroutput
set echo on
set sqlblanklines off
set define off
@$1
spool off
exit
EOF
RC=$?
这是我的sql脚本:
DECLARE
L_COUNT NUMBER := 0;
BEGIN
FOR i in 1..4 LOOP
l_count := l_count + 1;
END LOOP;
dbms_output.put_line('Num: ' || l_count);
END;
我希望在我的$ LOGFILE中看到l_count的结果,但我没有。当我打电话给sqlplus时,我确定我错过了一些设置功能。</ p>
有什么想法吗?
答案 0 :(得分:2)
你永远不会真正执行你的pl / sql匿名块。您需要在END之后加上'/';语句:
DECLARE
L_COUNT NUMBER := 0;
BEGIN
FOR i in 1..4 LOOP
l_count := l_count + 1;
END LOOP;
dbms_output.put_line('Num: ' || l_count);
END;
/
此外,使用shell stdout重定向来写入SPOOL命令指定的同一文件并不是一个好主意。选择一个或另一个,而不是两者。
答案 1 :(得分:0)
如果要将任何内容记录到任何日志文件中,例如logfile.log,使用
SQL> spool logfile.log
执行匿名阻止后,关闭假脱机
SQL> spool off