@@ -63,19 +63,20 @@ create or replace package body ut_metadata as
6363 l_schema varchar2(200);
6464 l_package_name varchar2(200);
6565 l_procedure_name varchar2(200);
66+ l_view_name varchar2(200) := get_dba_view('dba_objects');
6667 begin
6768
6869 l_schema := a_owner_name;
6970 l_package_name := a_package_name;
7071
7172 do_resolve(l_schema, l_package_name, l_procedure_name);
7273
73- select count(decode(status, 'VALID', 1, null)) / count(*)
74- into l_cnt
75- from all_objects
76- where owner = l_schema
77- and object_name = l_package_name
78- and object_type in ('PACKAGE') ;
74+ execute immediate q'[ select count(decode(status, 'VALID', 1, null)) / count(*)
75+ from ]'||l_view_name||q'[
76+ where owner = :l_schema
77+ and object_name = :l_package_name
78+ and object_type in ('PACKAGE')]'
79+ into l_cnt using l_schema, l_package_name ;
7980
8081 -- expect both package and body to be valid
8182 return l_cnt = 1;
@@ -90,6 +91,7 @@ create or replace package body ut_metadata as
9091 l_schema varchar2(200);
9192 l_package_name varchar2(200);
9293 l_procedure_name varchar2(200);
94+ l_view_name varchar2(200) := get_dba_view('dba_procedures');
9395 begin
9496
9597 l_schema := a_owner_name;
@@ -98,12 +100,10 @@ create or replace package body ut_metadata as
98100
99101 do_resolve(l_schema, l_package_name, l_procedure_name);
100102
101- select count(*)
102- into l_cnt
103- from all_procedures
104- where owner = l_schema
105- and object_name = l_package_name
106- and procedure_name = l_procedure_name;
103+ execute immediate
104+ 'select count(*) from '||l_view_name
105+ ||' where owner = :l_schema and object_name = :l_package_name and procedure_name = :l_procedure_name'
106+ into l_cnt using l_schema, l_package_name, l_procedure_name;
107107
108108 --expect one method only for the package with that name.
109109 return l_cnt = 1;
@@ -132,12 +132,12 @@ create or replace package body ut_metadata as
132132 function get_source_definition_line(a_owner varchar2, a_object_name varchar2, a_line_no integer) return varchar2 is
133133 l_line varchar2(4000);
134134 l_cursor sys_refcursor;
135+ l_view_name varchar2(128) := get_dba_view('dba_source');
135136 begin
136- open l_cursor for
137- select text from all_source s
138- where s.owner = a_owner and s.name = a_object_name and s.line = a_line_no
137+ open l_cursor for 'select text from '||l_view_name||q'[ s
138+ where s.owner = :a_owner and s.name = :a_object_name and s.line = :a_line_no
139139 -- skip the declarations, consider only definitions
140- and s.type not in ('PACKAGE','TYPE');
140+ and s.type not in ('PACKAGE','TYPE')]' using a_owner, a_object_name, a_line_no ;
141141 fetch l_cursor into l_line;
142142 close l_cursor;
143143 return ltrim(rtrim( l_line, chr(10) ));
@@ -146,5 +146,16 @@ create or replace package body ut_metadata as
146146 return null;
147147 end;
148148
149+ function get_dba_view(a_view_name varchar2) return varchar2 is
150+ l_invalid_object_name exception;
151+ l_result varchar2(128) := lower(a_view_name);
152+ pragma exception_init(l_invalid_object_name,-44002);
153+ begin
154+ l_result := dbms_assert.sql_object_name(l_result);
155+ return l_result;
156+ exception
157+ when l_invalid_object_name then
158+ return replace(l_result,'dba_','all_');
159+ end;
149160end;
150161/
0 commit comments