Anuncios en tutorial de programación PLSQL

miércoles, 8 de agosto de 2018

La vista ALL_IDENTIFIERS, usos y funcionalidades (2)

Ya escribí con anterioridad un articulo introductorio sobre la vista ALL_IDENTIFIERS. ALL_IDENTIFIERS muestra información relevante sobre todos los identificadores de los objetos PL/SQL o unidades de programa almacenados en la base de datos Oracle a los que tiene accesos un determinado usuario.

ALL_IDENTIFIERS

Las columnas clave de la vista ALL_IDENTIFIERS son:
  • OWNER: El propietario de objeto PL/SQL o unidad de programa que contiene el identificador.
  • NAME: Nombre del identificador.
  • TYPE: Tipo de identificador (por ejemplo, FORALL OUT, CONSTANT, PACKAGE o RECORD).
  • SIGNATURE: Cadena única asignada a cada identificador, útil para poder distinguir entre los diferentes identificadores que tienen el mismo nombre.
  • OBJECT_NAME: Nombre del objeto o unidad de programa que contiene el identificador.
  • OBJECT_TYPE: Tipo del objeto o unidad de programa que contiene el identificador (por ejemplo, PACKAGE, TRIGGER o PROCEDURE).
  • USAGE: Tipo de uso del dentificador.
  • USAGE_ID: Identificador único del uso del identificador.
  • USAGE_CONTEXT_ID: Clave foránea que identifica el USAGE_ID de su registro padre (por ejemplo, el registro padre de un parámetro de una función o procedimiento dentro de un paquete PLSQL sería la propia función o procedimiento).
  • LINE: Número de la línea de programa donde aparece el identificador.
  • COL: Número de columna en la línea de programa donde aparece el identificador.

Para obtener la información sobre todos los identificadores de un determinado programa u objeto PL/SQL basta con ejecutar la siguiente consulta:
SELECT *
  FROM all_identifiers ai
 WHERE ai.owner = USER 
   AND ai.object_type = '<tipo_del_programa>' 
   AND ai.object_name = '<nombre_del_programa>'
ORDER BY line

Usos posibles identificados en la vista ALL_IDENTIFIERS


La vista ALL_IDENTIFIERS almacena información detallada sobre como es utilizado cada identificador en nuestro código PLSQL. Cada registro en la vista hace referencia a una línea específica de código en una unidad de programa concreta. Dicho usos son especificados en la columna USAGE, columna que puede tomar cualquiera de los siguientes valores:
  • ASSIGNMENT: Indica que el valor del identificador no es fijo y puede ser modificado. Son identificadores que aparecen a la izquierda de un operador de asignación (por ejemplo, :=), que aparecen en una cláusula INTO de un SELECT, o que se pasan como parámetros de salida (OUT o IN OUT).
  • CALL: Indica que el identificador se utiliza en la llamada a una función o procedimiento, o al hacer una llamada a una sentencia SQL.
  • DECLARATION: Indica que el identificador es declarado en dicha línea.
  • REFERENCE: Indica que el identificador se utiliza en la unidad de programa sin que cambie su valor. Por ejemplo, cuando se utiliza en una sentencia RAISE, cuando se utiliza como parámetro de entrada de un subprograma (IN o IN OUT), cuando se usa en la cláusula USING de una sentencia EXECUTE IMMEDIATE, o cuando se emplea en una declaración %TYPE.
  • DEFINITION: Indica al compilador como implementar o utilizar un identificador declarado previamente. Los tipos de objetos PL/SQL FUNCTION, OBJECT, PACKAGE, PROCEDURE, TRIGGER y EXCEPTION, tendrán siempre un registro de tipo DEFINITION en la vista ALL_IDENTIFIERS.

Por todo lo dicho, la columna USAGE permite obtener información detallada sobre las unidades de programa y objetos PL/SQL. Por ejemplo, si queremos saber los variables declaradas dentro de una unidad de programa bastaría con ejecutar la siguiente consulta:
SELECT ai.object_name,
       ai.object_type,
       ai.line line_number,
       ai.name variable_name
  FROM all_identifiers ai
 WHERE ai.owner = USER AND 
       ai.TYPE = 'VARIABLE' AND 
       ai.usage = 'DECLARATION'
ORDER BY ai.object_name, ai.object_type, ai.usage_id

En capítulos posteriores proporcionaré más consultas de interés que utilizan la vista ALL_IDENTIFIERS.

0 comentarios: