加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

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

发布时间:2021-03-16 20:04:04 所属栏目:站长百科 来源:网络整理
导读:是否可以在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...*/ $ELS

是否可以在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处理……

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读