如何处理 pl/sql 块中的编译时异常?

Posted

技术标签:

【中文标题】如何处理 pl/sql 块中的编译时异常?【英文标题】:How to handle compile time exception in pl/sql block? 【发布时间】:2014-02-14 06:15:32 【问题描述】:

实际上这是一个愚蠢的问题,因为为什么你会在你的代码中允许编译时异常,但我的情况有些不同。

实际上,我正在编写一个 pl/sql 块,在其中我在运行时获取表名,然后在查询中使用该表名,其中我有一个 where 子句“where maker ='AUTO_MAST_MAK'”。现在问题是在某些表中“制造商”列不可用,因此该块没有被编译。

任何机构都可以帮助我解决我的问题.. 或任何建议“我应该改变解决问题的方法吗”

【问题讨论】:

请发布您如何使用 where 子句调用动态查询,您是否尝试过 BEGIN - EXCEPTION - END 块? 【参考方案1】:

动态 PL/SQL 可以处理编译错误:

declare
    compile_error exception;
    pragma exception_init(compile_error, -06550);
begin
    execute immediate q'<
        begin
            does not compile
        end;    
    >';
exception when compile_error then
    dbms_output.put_line('PL/SQL Block did not compile.');
end;
/

【讨论】:

【参考方案2】:

在生成PLSQL块之前为什么不检查这个列?

select table_name,column_name,data_type from user_tab_columns

只需检查表在运行时是否有此列。

【讨论】:

以上是关于如何处理 pl/sql 块中的编译时异常?的主要内容,如果未能解决你的问题,请参考以下文章

如何处理C++编译webrtc无法成功获取sdp的问题?

编译数据库项目时如何处理临时表

如何处理在反编译时,原包验证包名问题

如何处理C++编译webrtc无法成功获取sdp的问题?

检查 PL/SQL 异常块中的特定错误代码

为啥在匿名 PL/SQL 块中没有立即引发异常?