加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 百科 > 正文

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

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

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

(编辑:PHP编程网 - 黄冈站长网)

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

    热点阅读