Oracle 如何(在代码中)在不正确的表名上断开与SQL连接的连接?

Oracle 如何(在代码中)在不正确的表名上断开与SQL连接的连接?,oracle,batch-file,sqlplus,Oracle,Batch File,Sqlplus,场景: 我有一个通过sqlplus调用.sql文件的批处理脚本。.sql文件如下所示: set serveroutput on variable out_val varchar2; exec &1; print out_val exit 问题: 批处理脚本传递一个字符串,在该字符串上执行.sql。我希望这个字符串在99%的时间内都是正确的,但我需要为最后1%做计划,因为批处理将每5分钟调用一次。当.sql被传递了正确的登录信息和架构,但表名不正确时,我的批处理将挂起并且不会自动关闭。相

场景

我有一个通过sqlplus调用.sql文件的批处理脚本。.sql文件如下所示:

set serveroutput on
variable out_val varchar2;
exec &1;
print out_val
exit
问题

批处理脚本传递一个字符串,在该字符串上执行.sql。我希望这个字符串在99%的时间内都是正确的,但我需要为最后1%做计划,因为批处理将每5分钟调用一次。当.sql被传递了正确的登录信息和架构,但表名不正确时,我的批处理将挂起并且不会自动关闭。相反,它会一直登录到sql连接,直到我按Ctrl+C并手动关闭它。我尝试了以下TRY/CATCH块,但没有改变问题:

set serveroutput on
variable out_val varchar2;
begin try
exec &1;
end try
begin catch
exit
end catch
print out_val
exit
问题

如果输入的表名不正确,如何对批处理脚本或sql代码块进行编码以自动断开与sql连接的连接?(请注意,我不能使用IF语句来测试每个可能的表名,因为表名太多并且可能经常更改。如果找不到表名,则需要能够断开连接。)

试试看

WHENEVER SQLERROR EXIT FAILURE ROLLBACK    
set serveroutput on
variable out_val varchar2;
exec &1;
print out_val
exit

可能是put
kill connection_id()
在您的catch block中的
退出
位置?请仔细标记。MySQL!=SQLServer!=约翰补充说,代替退出是行不通的。这就像一种魅力。我知道我没有解释可执行函数是什么,但我删除了“故障回滚”(因为我不需要它),代码工作得非常完美。谢谢你!好吧,奇怪。我刚刚删除了你添加的那一行并运行了我的批处理,它工作正常。不确定发生了什么。只要SQLERROR在会话期间保持有效(退出,或直到您发出只要SQLERROR CONTINUE),即如果您运行一次,然后保持连接,并且您编辑了脚本以删除该行,而在会话中,您将看到它仍然有效。如果退出sqlplus并在不使用fid的情况下尝试脚本,它将恢复。随时阅读sqlplus以完全理解这一点。啊,好的。这是有道理的。我又把它加进去了。再次感谢你的帮助!