Ora | dba_source - Extended
dba_source - Extended
This utility extends the default DBA_SOURCE view and gives the below additional details as separate columns.
- TEXT column for uncommented code
- name of the procedure, function and cursor name defined within a package/procedure/function.
- sub procedure / function name i.e procedures and functions defined within a another procedure/function.
Download the Source Code
Installation Steps
- Download the sqls from the above links.
- Run them in the same order.
Usage Notes
select * from uc_dba_source_v where owner = '[schema name]' and object_name = '[procedure/function/package name]'
Example
Here is the source code of the package body, taken for our exampleCREATE OR REPLACE PACKAGE BODY VSUBR.my_test IS /* this package is the test package to show how the DBA_source -extention works. This is just a dummy code to show how the utility works. please dont look intothe logic inside the code */ FUNCTION fun_test( p_param1 varchar2, p_param2 varchar2, p_param3 varchar2) RETURN NUMBER IS -- var number; var_new number; CURSOR c1 IS select 'x' col1, /*'y' col2,*/ 'z' col3 from dual; /* procedure sub_prc_test1( sp_param1 varchar2) IS BEGIN -- not planning to do anything here..just a show null; END; */ procedure sub_prc_test1( sp_param1 varchar2) IS BEGIN -- not planning to do anything here..just a show null; END sub_prc_test1; BEGIN sub_prc_test1( 'a'); var_new :=2; --var_new :=3; var_new :=4; return var_new; END; procedure prc_test( p_param1 varchar2, p_param2 varchar2, p_param3 varchar2) IS BEGIN null; END; END; /Now lets use our DBA_SOURCE_Extension utility
select * from vsubr.uc_dba_source_v where owner = '[owner name]' and object_name = 'MY_TEST' and object_type = 'PACKAGE BODY'and here is the result.
Limitations
The known limitation of this function is that - This query works effectively when it is filtered for a specific owner and object_name. It will work even without the filter condition, but it will be very slow.Solution-1: One option is, try to run this script for all your source code in your DB during the night and populate that information to a table. so during the day you can use this table to all your querying purposes. But the limitation of this solution is that, if a source is changed and released during the day, then the query result will not be in sync with the actual source
Solution-2: You can make a hybrid view i.e check if the source was changed during the day( using the DDL_DATE_TIME) and if yes, then call the UC function, if not return the data from the pre-populated table ( table populated in solution-1)
If you find any issues with this util, please let me know by leaving a comment and I will try to fix that for you.
Comments