oracle – PL / SQL有条件地编译数据库对象的存在

前端之家收集整理的这篇文章主要介绍了oracle – PL / SQL有条件地编译数据库对象的存在前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
是否可以在Oracle中进行条件编译,其中条件是存在数据库对象(特别是表或视图或同义词)?我希望能够做到这样的事情:

sp_some_procedure is
    $IF /*check if A exists.*/ then 
        /* read from and write to A as well as other A-related non-DML stuff...*/
    $ELSE /*A doesn't exist yet,so avoid compiler errors*/
        dbms_output.put_line('Reminder: ask DBA to create A!')
    $ENDIF
end;

解决方法

不 – 这是不可能的……但是如果你创建一个存储过程引用一个不存在的DB对象并尝试编译它,编译将显示错误…存储过程将在那里,但“无效”…和每当他查看它时,DBA都可以访问编译错误…所以我会继续创建所有需要的存储过程,如果出现任何编译错误请求DBA(有时对象存在但存储过程需要访问权限它……)…在修复了错误的原因之后你可以重新编译存储过程(通过 ALTER PROCEDURE MySchema.MyProcName COMPILE;),一切都很好……

如果您不希望代码在那里,您可以只删除标记过程和/或替换是通过CREATE OR REPLACE …与dbms_output.put_line(‘提醒:请DBA创建A!’)在正文中.

唯一的另一种选择是kevin指出EXECUTE IMMEDIATE具有适当的EXCEPTION处理……

猜你在找的Oracle相关文章