lunes, 4 de septiembre de 2017

Oracle 12c R2 - Mejoras a PL/SCOPE

¿Que es PL/Scope?

PL/Scope es una herramienta del compilador introducida en Oracle 11g que recopila datos sobre identificadores en el código fuente PL/SQL en tiempo de compilación de unidades de programa. La información recopilada queda disponible en vistas estáticas del diccionario de datos. Los datos recogidos incluyen información sobre tipos de identificadores, sus usos (declaración, definición, referencia, llamada, asignación) y la ubicación de cada uso en el código fuente de nuestros programas.


¿Como se lo habilita?

El parámetro "PLSCOPE_SETTINGS" define el comportamiento de esta herramienta al momento de compilar código PL/SQL. Por defecto, su valor es "IDENTIFIERS:NONE".

Una de las nuevas funcionalidades en Oracle 12.2 es la posibilidad de aceptar otras opciones aparte para indicar el tipo de identificador.

Sintaxis (en negrita las nuevas opciones de 12.2)

IDENTIFIERS : { ALL | NONE | PUBLIC | SQL | PLSQL }
STATEMENTS  : { ALL | NONE } 

Ejemplo

Para habilitar el uso de PL/Scope al momento de compilar, sólo es necesario modificar el parámetro "PLSCOPE_SETTINGS" y crear o modificar una unidad de programación almacenada en la base de datos (procedimiento, función o paquete)

CREATE TABLE t_datos (ID NUMBER(10), Dato VARCHAR(100), Nada VARCHAR(100)); -- ALTER SESSION SET PLSCOPE_SETTINGS='IDENTIFIERS:ALL'; -- CREATE OR REPLACE PROCEDURE PRUEBA_PLSCOPE(p_numerico IN NUMBER) AS -- v_numero NUMBER; v_texto VARCHAR2(30000); -- BEGIN -- SELECT dummy INTO v_texto FROM dual; -- SELECT COUNT(*) + p_numerico INTO v_numero FROM dual; -- INSERT INTO t_datos (ID, Dato) VALUES (v_numero, v_texto); -- END; / DROP TABLE t_datos;

¿Cómo se utiliza la información generada por PL/Scope?

Una vez que compilamos una unidad de programación teniendo habilitado PL/Scope, es posible consultar la información generada utilizando las vista estáticas "ALL_IDENTIFIERS" y "ALL_STATEMENTS" ( o sus versiones user_* o dba_*).

SELECT ai.usage_id, ai.usage, ai.type, ai.name, ai.line, ai.col

FROM ALL_IDENTIFIERS ai

WHERE ai.object_name = 'PRUEBA_PLSCOPE'

ORDER BY ai.usage_id;


SELECT a_s.usage_id, a_s.type, a_s.line, a_s.col, a_s.text

FROM ALL_STATEMENTS a_s

WHERE a_s.object_name = 'PRUEBA_PLSCOPE'

ORDER BY a_s.usage_id;


¿Que nuevos tipos de identificadores y sentencias soporta PL/Scope en Oracle 12.2?

Oracle 12c Release 2 incluye los siguientes nuevos tipo de identificadores, antes no tenidos en cuenta por PL/Scope

Identificadores

  • ALIAS
  • COLUMN
  • MATERIALIZED VIEW
  • OPERATOR
  • TABLE

Sentencias

  • SELECT
  • UPDATE
  • INSERT
  • DELETE
  • MERGE
  • EXECUTE IMMEDIATE
  • SET TRANSACTION
  • LOCK TABLE
  • COMMIT
  • SAVEPOINT
  • ROLLBACK
  • OPEN
  • CLOSE
  • FETCH

¿Dónde se almacena la información generada por PL/Scope?


La información que PL/Scope recopila al momento de compilar una unidad de programación, es almacenada en el tablespace SYSAUX.

SELECT SPACE_USAGE_KBYTES
FROM V$SYSAUX_OCCUPANTS
WHERE OCCUPANT_NAME='PL/SCOPE';

SPACE_USAGE_KBYTES
------------------
              1088


Referencias e Información Adicional


No hay comentarios.:

Publicar un comentario