我在这里看到了一些用于检查包中的过程的解决方案,但它们只适用于Oracle9或10+。
但是,在Oracle8i中可以执行此检查吗?在Oracle8中,您没有DBA_PROCEDURES或类似的东西。
任何帮助都是最好的。
发布于 2012-11-07 18:53:24
使用DBMS_DESCRIBE。它有8i版本。
请参阅:http://docs.oracle.com/cd/A87860_01/doc/index.htm
如果函数的过程不存在,它将返回ORA-20001错误。
例如
declare
V_YOUR_PROC_NAME varchar2(100) := 'MY_PACK.FUNC';
function proc_exists(p_name varchar2) return boolean
is
overload dbms_describe.number_table;
position dbms_describe.number_table;
c_level dbms_describe.number_table;
arg_name dbms_describe.varchar2_table;
dty dbms_describe.number_table;
def_val dbms_describe.number_table;
p_mode dbms_describe.number_table;
length dbms_describe.number_table;
precision dbms_describe.number_table;
scale dbms_describe.number_table;
radix dbms_describe.number_table;
spare dbms_describe.number_table;
idx integer := 0;
PROC_NOT_FOUND exception;
pragma exception_init(PROC_NOT_FOUND, -20001);
begin
dbms_describe.describe_procedure(
p_name,null,null,
overload,position,
c_level,arg_name,
dty,def_val,p_mode,
length,precision,
scale,radix,spare);
return true;
exception
when PROC_NOT_FOUND
then
return false;
end;
begin
if (proc_exists(V_YOUR_PROC_NAME))
then
dbms_output.put_line(' found');
else
dbms_output.put_line(' not found');
end if;
end;发布于 2012-11-07 18:00:40
我不确定这是否能在Oracle8上运行,但可以试试这个:
select *
from all_procedures
where object_name = '<package_name>'
and procedure_name = '<proc_name>'发布于 2012-11-07 18:26:33
按照this question中的建议,您可能会被强制扫描到all_source视图。
https://stackoverflow.com/questions/13267084
复制相似问题