Anuncios en tutorial de programación PLSQL

lunes, 2 de julio de 2018

PL/Scope para analizar el código PL/SQL, la vista USER_IDENTIFIERS (1)

Ya hablamos en un artículo anterior sobre la posibilidad de ejecutar consultas sobre la vista USER_SOURCE para comprobar la presencia o ausencia de determinadas cadenas de caracteres en nuestro código PL/SQL, algo que, entre otras posibilidades, permite realizar comprobaciones simples para comprobar si nuestro código cumple con unos mínimos requisitos de calidad.

ALL_IDENTIFIERS, USER_IDENTIFIERS y DBA_IDENTIFIERS

Pero la base de datos Oracle, desde la aparición de la versión 11g, ofrece medios mucho más potentes para analizar nuestro código PL/SQL utilizando PL/Sope. En este artículo hablaremos de como utilizar esta nueva funcionalidad para ampliar y mejorar lo que ya ofrecía la vista USER_SOURCE mediante la utilización de la vista USER_IDENTIFIERS. Este es el primer artículos de una serie en la que hablaremos de todas las posibilidades que ofrece esta nueva vista.

PL/Scope se trata de una potente herramienta invocada por el compilador PL/SQL que recoge información acerca de todos los identificadores (procedimientos, funciones, variables, tipos, etcétera) en nuestros programas PL/SQL, información a la que se puede acceder a través de la vista USER_IDENTIFIERS. Esto permite a los desarrolladores dar respuesta de forma sencilla a preguntas que de otra forma requerirían acceder y analizar el código del programa PL/SQL.

Por ejemplo, supongamos que queremos eliminar de nuestros programas PL/SQL todas las excepciones, variables, constantes e identificadores similares que aparecen declarados pero que posteriormente no se utilizan en el código. Resulta evidente que el simple hecho de encontrar todos los programas PL/SQL que son candidatos a ser modificados por este hecho es una tarea que llevará mucho tiempo y, además, susceptible de que cometamos algún error.

Para esta tarea podemos utilizar la vista USER_IDENTIFIERS que contiene un registro para cada identificador que se declara en un programa y, además, contiene registros en los que se hace referencia a los usos de dicho identificador, por ejemplo a las líneas de código en las que se cambia el valor de dicho identificador.

Estos nos lleva a la posibilidad de utilizar la cláusula MINUS para, tras diferenciar en dos consultas SQL ambos conjuntos de registros, quedarnos solo con aquellos que han sido declarados pero que posteriormente no han sido referenciados o utilizados nunca.

Esta sería la consulta para encontrar todas las variables que han sido definidas dentro de un programa PL/SQL que luego no son utilizadas dentro del mismo:
WITH defined_variables AS
  (SELECT DISTINCT owner ,
    object_name ,
    object_type ,
    name
  FROM all_identifiers has_exc
  WHERE has_exc.owner = USER
  AND has_exc.usage   = 'DECLARATION'
  AND has_exc.TYPE    = 'VARIABLE'
  ),
  used_variables AS
  (SELECT DISTINCT owner ,
    object_name ,
    object_type ,
    name
  FROM all_identifiers with_rh
  WHERE with_rh.owner = USER
  AND with_rh.usage   = 'REFERENCE'
  AND with_rh.TYPE    = 'VARIABLE'
  )
SELECT * FROM defined_variables
MINUS
SELECT * FROM used_variables;

Como podéis ver, la funcionalidad PL/Scope se trata de una herramienta muy potente que ofrece un amplio abanico de posibilidades a los desarrolladores a la hora de analizar el código PL/SQL e identificar maneras de mejorarlo. En artículos posteriores iré mencionando nuevos usos de esta herramienta.

0 comentarios: