【发布时间】:2016-01-07 05:53:17
【问题描述】:
我正在编写一个部署脚本,其中包含一个 MERGE 到一个视图中,该视图可能存在也可能不存在于许多目标架构之一(架构?架构?)中。
我正在尝试这个 SQL:
DECLARE
BEGIN
/* MERGE statement that will work if the view is available */
EXCEPTION
WHEN OTHERS THAN
DBMS_OUTPUT.put_line('warning: merge target is not available');
END;
当我运行这个块时,我得到标准的“PL/SQL:ORA-00942:表或视图不存在”错误。
如何捕获此错误并生成警告行?
【问题讨论】:
-
什么是 upsert ?一个心烦意乱的插入?
-
@Marged: stackoverflow.com/q/237327/1430996
-
Oracle 编译/解析 pl/sql 块时会出现该错误,因此它实际上并未运行代码。解决此问题的一种方法是将语句写入 varchar2 字符串并使用 EXECUTE IMMEDIATE 运行它,因为这会在运行时而不是在脚本编译时引发异常。