我正在尝试使用EXCEPTION WHERE来捕获我尝试删除的不存在的表,如下所示:
begin
execute immediate 'drop table X';
exception when others then null;
end;
如果表x存在并且我运行此表,那么该表将被删除并且一切都很好。如果再次运行它,则没有要删除的表,但是EXCEPTION会导致脚本愉快地进行。到目前为止,一切都很好。
如果我尝试多次执行此操作,则会出现问题。
如果我运行此脚本来删除表X和Y:
begin
execute immediate 'drop table X';
exception when others then null;
execute immediate 'drop table Y';
exception when others then null;
end;
我得到以下错误信息:
从第1行开始的错误-
begin
execute immediate 'drop table X';
exception when others then null;
execute immediate 'drop table Y';
exception when others then null;
end;
错误报告- ORA-06550:第6行,第1列: PLS-00103:预期以下情况之一时遇到符号“ EXCEPTION”:
(如果循环mod为null,则开始情况为goto声明结束出口 编译时提高回报选择更新,而与 <<继续关闭当前删除删除锁 插入打开回滚保存点集sql执行commit forall 合并管道吹扫 ORA-06550:第7行,第4列: PLS-00103:预期以下情况之一时遇到符号“文件结尾”:
end not pragma最终实例化命令覆盖静态 成员构造函数图 06550。00000-“%s行,%s列:\ n%s” *原因:通常是PL / SQL编译错误。 *动作:
我在这里想念什么?如果我删除了第二个EXCEPTION WHEN语句,那么如果表Y不存在,脚本将失败...我需要捕获此错误...
答案 0 :(得分:0)
exception when others then null;
适用于单个Begin / End块。在一个块中具有多个倍数并不是真的有效。您可以通过单独捕获多个块来解决此问题。
begin
execute immediate 'drop table X';
exception when others then null;
end;
/
begin
execute immediate 'drop table Y';
exception when others then null;
end;
/
答案 1 :(得分:0)
我在这里找到了答案:
Two PLSQL statements with begin and end, run fine separately but not together?
显然我需要
begin
begin
some stuff
end;
begin
some other stuff
end;
end;
或在两个内部块END的每一个之后放置一个/;的...