@@ -21,31 +21,6 @@ create or replace package body ut_metadata as
2121 g_cached_object varchar2(500);
2222 ------------------------------
2323 --public definitions
24-
25- procedure do_resolve(a_owner in out nocopy varchar2, a_object in out nocopy varchar2, a_procedure_name in out nocopy varchar2) is
26- l_name varchar2(200);
27- l_context integer := 1; --plsql
28- begin
29- l_name := form_name(a_owner, a_object, a_procedure_name);
30- do_resolve(l_name,l_context,a_owner,a_object, a_procedure_name);
31- end do_resolve;
32-
33- procedure do_resolve(a_fully_qualified_name in varchar2,a_context in integer,a_owner out nocopy varchar2, a_object out nocopy varchar2,
34- a_procedure_name out nocopy varchar2) is
35- l_dblink varchar2(200);
36- l_part1_type number;
37- l_object_number number;
38- begin
39- dbms_utility.name_resolve(name => a_fully_qualified_name
40- ,context => a_context
41- ,schema => a_owner
42- ,part1 => a_object
43- ,part2 => a_procedure_name
44- ,dblink => l_dblink
45- ,part1_type => l_part1_type
46- ,object_number => l_object_number);
47- end;
48-
4924 function form_name(a_owner_name varchar2, a_object varchar2, a_subprogram varchar2 default null) return varchar2 is
5025 l_name varchar2(200);
5126 begin
@@ -61,25 +36,16 @@ create or replace package body ut_metadata as
6136
6237 function package_valid(a_owner_name varchar2, a_package_name in varchar2) return boolean as
6338 l_cnt number;
64- l_schema varchar2(200);
65- l_package_name varchar2(200);
66- l_procedure_name varchar2(200);
6739 l_view_name varchar2(200) := get_objects_view_name;
6840 begin
6941
70- l_schema := a_owner_name;
71- l_package_name := a_package_name;
72-
73- do_resolve(l_schema, l_package_name, l_procedure_name);
74-
75- execute immediate q'[select count(decode(status, 'VALID', 1, null)) / count(*)
42+ execute immediate q'[select count(*)
7643 from ]'||l_view_name||q'[
77- where owner = :l_schema
78- and object_name = :l_package_name
79- and object_type in ('PACKAGE')]'
80- into l_cnt using l_schema, l_package_name;
81-
82- -- expect both package and body to be valid
44+ where owner = :a_owner_name
45+ and object_name = :a_package_name
46+ and object_type = 'PACKAGE'
47+ and status = 'VALID']'
48+ into l_cnt using upper(a_owner_name), upper(a_package_name);
8349 return l_cnt = 1;
8450 exception
8551 when others then
@@ -89,22 +55,12 @@ create or replace package body ut_metadata as
8955 function procedure_exists(a_owner_name varchar2, a_package_name in varchar2, a_procedure_name in varchar2)
9056 return boolean as
9157 l_cnt number;
92- l_schema varchar2(200);
93- l_package_name varchar2(200);
94- l_procedure_name varchar2(200);
9558 l_view_name varchar2(200) := get_dba_view('dba_procedures');
9659 begin
97-
98- l_schema := a_owner_name;
99- l_package_name := a_package_name;
100- l_procedure_name := a_procedure_name;
101-
102- do_resolve(l_schema, l_package_name, l_procedure_name);
103-
10460 execute immediate
10561 'select count(*) from '||l_view_name
106- ||' where owner = :l_schema and object_name = :l_package_name and procedure_name = :l_procedure_name'
107- into l_cnt using l_schema, l_package_name, l_procedure_name ;
62+ ||' where owner = :l_schema and object_name = :l_package_name and procedure_name = :l_procedure_name and rownum = 1 '
63+ into l_cnt using a_owner_name, a_package_name, a_procedure_name ;
10864
10965 --expect one method only for the package with that name.
11066 return l_cnt = 1;
@@ -327,12 +283,16 @@ create or replace package body ut_metadata as
327283 end;
328284
329285 function get_object_name(a_full_object_name in varchar2) return varchar2 is
330- l_schema varchar2(250);
331- l_object varchar2(250);
332- l_procedure_name varchar2(250);
286+ l_result varchar2(250);
333287 begin
334- ut_metadata.do_resolve(a_full_object_name,7,l_schema,l_object, l_procedure_name);
335- return l_object;
288+ l_result := regexp_substr(
289+ a_full_object_name,
290+ '^([A-Za-z0-9$#_]+|".*?")\.([A-Za-z0-9$#_]+|".*?")', subexpression => 2
291+ );
292+ if not l_result like '"%"' then
293+ l_result := upper(l_result);
294+ end if;
295+ return sys.dbms_assert.qualified_sql_name(l_result);
336296 end;
337297
338298 function get_anydata_compound_type(a_data_value anydata) return varchar2 is
0 commit comments