@@ -21,31 +21,6 @@ create or replace package body ut_metadata as
21
21
g_cached_object varchar2(500);
22
22
------------------------------
23
23
--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
-
49
24
function form_name(a_owner_name varchar2, a_object varchar2, a_subprogram varchar2 default null) return varchar2 is
50
25
l_name varchar2(200);
51
26
begin
@@ -61,25 +36,16 @@ create or replace package body ut_metadata as
61
36
62
37
function package_valid(a_owner_name varchar2, a_package_name in varchar2) return boolean as
63
38
l_cnt number;
64
- l_schema varchar2(200);
65
- l_package_name varchar2(200);
66
- l_procedure_name varchar2(200);
67
39
l_view_name varchar2(200) := get_objects_view_name;
68
40
begin
69
41
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(*)
76
43
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);
83
49
return l_cnt = 1;
84
50
exception
85
51
when others then
@@ -89,22 +55,12 @@ create or replace package body ut_metadata as
89
55
function procedure_exists(a_owner_name varchar2, a_package_name in varchar2, a_procedure_name in varchar2)
90
56
return boolean as
91
57
l_cnt number;
92
- l_schema varchar2(200);
93
- l_package_name varchar2(200);
94
- l_procedure_name varchar2(200);
95
58
l_view_name varchar2(200) := get_dba_view('dba_procedures');
96
59
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
-
104
60
execute immediate
105
61
'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 ;
108
64
109
65
--expect one method only for the package with that name.
110
66
return l_cnt = 1;
@@ -327,12 +283,16 @@ create or replace package body ut_metadata as
327
283
end;
328
284
329
285
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);
333
287
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);
336
296
end;
337
297
338
298
function get_anydata_compound_type(a_data_value anydata) return varchar2 is
0 commit comments