是否可以在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;
Run Code Online (Sandbox Code Playgroud)
不 - 这是不可能的...但是如果您创建一个引用不存在的数据库对象的存储过程并尝试编译它,编译将显示错误...存储过程将在那里,但“无效”...并且DBA 每当查看时都可以访问编译错误...所以我会继续创建所有需要的存储过程,如果出现任何编译错误,请询问 DBA(有时对象存在,但存储过程需要访问权限)它...)...修复错误原因后,您可以重新编译存储过程(通过ALTER PROCEDURE MySchema.MyProcName COMPILE;
),一切都很好...
如果您不希望代码在那里,您可以只DROP
存储过程和/或替换为 via CREATE OR REPLACE
... withdbms_output.put_line('Reminder: ask DBA to create A!')
在体内。
唯一的其他选择是凯文指出的EXECUTE IMMEDIATE
适当EXCEPTION
处理......
归档时间: |
|
查看次数: |
2981 次 |
最近记录: |