Busqueda de un texto en el código PL/SQL almacenado en base de datos
No os ha pasado alguna vez, que tenéis que buscar un literal en cierta parte del código y no os acordais donde era. Una forma rápida y sencilla es consultar las tablas user_source o all_source. Estas tablas contienen por cada línea de código el propietario del objeto, el nombre del objeto, el tipo, la línea y el contenido de la línea.
Los tipos de fuentes pueden ser PROCEDURE, PACKAGE, PACKAGE BODY, LIBRARY, TYPE BODY, TRIGGER, FUNCTION o TYPE y el Owner debe ponerse en mayúsculas.
Para forzar a buscar tanto mayúsculas como minúsculas, podemos utilizar la función UPPER().
Vamos a buscar la palabra «integEr» sin tener en cuenta si en el código está en mayúsculas o minúsculas entre los encabezados y cuerpos de los paquetes de SYS:
SQL> select OWNER, NAME, TYPE, LINE, TEXT
2 from all_source
3 where owner = 'SYS'
4 and type in ('PACKAGE', 'PACKAGE BODY')
5 and upper(text) like upper('%integEr%')
6 and rownum < 3;
OWNER NAME TYPE LINE
------------------------------ ------------------------------ ------------ ----------
TEXT
-------------------------------------------------------------------------------------
SYS DBMSHSXP PACKAGE 4
FUNCTION system_info_exp(prepost IN PLS_INTEGER,
SYS DBMSHSXP PACKAGE 7
new_block OUT PLS_INTEGER)
Se podría obtener todo el código de los tipos anteriormente indicados de la siguiente manera:
SQL> select OWNER, NAME, TYPE, LINE, TEXT
2 from all_source
3 where owner = 'SYS'
4 and type = 'PACKAGE'
5 and name = 'DBMSHSXP';
OWNER NAME TYPE LINE
------------------------------ ------------------------------ ------------ ----------
TEXT
-------------------------------------------------------------------------------------
SYS DBMSHSXP PACKAGE 1
PACKAGE dbmshsxp AUTHID CURRENT_USER AS
SYS DBMSHSXP PACKAGE 2
SYS DBMSHSXP PACKAGE 3
-- Generate PL/SQL for procedural actions
SYS DBMSHSXP PACKAGE 4
FUNCTION system_info_exp(prepost IN PLS_INTEGER,
SYS DBMSHSXP PACKAGE 5
connectstring OUT VARCHAR2,
SYS DBMSHSXP PACKAGE 6
version IN VARCHAR2,
SYS DBMSHSXP PACKAGE 7
new_block OUT PLS_INTEGER)
SYS DBMSHSXP PACKAGE 8
RETURN VARCHAR2;
SYS DBMSHSXP PACKAGE 9
SYS DBMSHSXP PACKAGE 10
END dbmshsxp;
Comments are closed.

