我在这里看到了一些用于检查程序包中的过程的解决方案,但它们仅适用于 oracle 9 或 10+。
但是是否可以在 Oracle 8i 中进行此检查?在 Oracle 8 中,您没有 DBA_PROCEDURES 或类似的东西。
任何帮助都会很棒。
使用 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;
不确定这是否适用于 Oracle 8,但试试这个:
select *
from all_procedures
where object_name = '<package_name>'
and procedure_name = '<proc_name>'
正如在这个问题中建议的那样,您可能会被迫扫描到all_source
视图中。
这应该可以在 Oracle 8i 上运行(由于在火车上,我无法对此进行测试)
CREATE OR REPLACE FUNCTION check_for_procedure
(procedure_name IN VARCHAR2)
RETURN BOOLEAN
AS
procedure_count NUMBER;
BEGIN
SELECT COUNT(*)
INTO procedure_count
FROM USER_SOURCE
WHERE TYPE = 'PROCEDURE'
AND NAME = procedure_name;
RETURN 1 = procedure_count;
EXCEPTION
WHEN OTHERS
THEN
RETURN FALSE;
END check_for_procedure;
可惜不能使用USER_PROCEDURES
或者ALL_PROCEDURES
因为它只存在于Oracle 9i及以上
select * from all_objects
where object_name = <object name>
and object_type='PROCEDURE'
不同的对象类型,它也应该在 oracle 8 中工作。
OBJECT_TYPE
1 JOB CLASS
2 INDEX
3 TABLE SUBPARTITION
4 INDEXTYPE
5 PROCEDURE
6 JAVA CLASS
7 SCHEDULE
8 WINDOW
9 WINDOW GROUP
10 JAVA RESOURCE
11 TABLE PARTITION
12 TABLE
13 TYPE
14 VIEW
15 FUNCTION
16 PROGRAM
17 SYNONYM
18 CONSUMER GROUP
19 EVALUATION CONTEXT
20 DIRECTORY
21 OPERATOR
22 PACKAGE
23 SEQUENCE
24 XML SCHEMA
25 INDEX PARTITION
26 LOB
在包中查找特定程序
SELECT *
FROM ALL_PROCEDURES
WHERE OBJECT_TYPE = 'PACKAGE' AND
OBJECT_NAME = <package name> AND
PROCEDURE_NAME = <procedure name>