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.