Busqueda de un texto en el código PL/SQL almacenado en base de datos

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.