如何处理 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 块中的编译时异常?的主要内容,如果未能解决你的问题,请参考以下文章