¿Qué es "PRAGMA DEPRECATE"?
La opción de compilador "PRAGMA DEPRECATE" permite marcar a un elemento PL/SQL como obsoleto. El compilador emite advertencias para usos del pragma DEPRECATE o el de elementos obsoletos.
Las advertencias le indican a los usuarios que utilizan un elemento obsoleto que es necesario cambiar el código para tener en cuenta la depreciación.
Se puede marcar como obsoleto objetos de los siguientes tipos:
Las advertencias le indican a los usuarios que utilizan un elemento obsoleto que es necesario cambiar el código para tener en cuenta la depreciación.
¿Qué objetos se pueden marcar como obsoletos con "PRAGMA DEPRECATE"?
Se puede marcar como obsoleto objetos de los siguientes tipos:
- Subprograms
- Packages
- Variables
- Constants
- Types
- Subtypes
- Exceptions
- Cursors
¿Cómo se utiliza?
Habilitar las advertencias de compilador
Como primer medida, tenemos que habilitar las advertencias de compilador para poder utilizar este nuevo Pragma. Se puede hacer para las advertencias relacionadas con "PRAGMA DEPRECATE" o bien se puede habilitar para todas las advertencias de compilación.
ALTER SESSION SET PLSQL_WARNINGS='ENABLE:(6019,6020,6021,6022)';
ALTER SESSION SET PLSQL_WARNINGS='ENABLE:ALL';
Compilar una unidad de programación utilizando ""PRAGMA DEPRECATE"
En el siguiente ejemplo, compilamos un paquete e indicamos que el mismo se encuentra obsoleto al incluir la línea "PRAGMA DEPRECATE" seguida del nombre del paquete.
CREATE OR REPLACE PACKAGE pkg_Deprecado AUTHID DEFINER
AS
PRAGMA DEPRECATE (pkg_Deprecado);
--
PROCEDURE Procedimiento1;
--
FUNCTION Funcion1 RETURN NUMBER;
END pkg_Deprecado;
SP2-0808: Package created with compilation warnings
Dependiendo de la IDE que utilicemos para desarrollar, la advertencia puede mostrarse en forma automática o tendremos que consultar que tipo de advertencia se ha generado:
SQL> SHOW ERRORS
Errors for PACKAGE PKG_DEPRECADO:
LINE/COL ERROR
-------- -------------------------------------------------------
3/4 PLW-06019: entity PKG_DEPRECADO is deprecated
Lo mismo si probamos de marcar como obsoleto sólo a un procedimiento de un paquete:
CREATE OR REPLACE PACKAGE pkg_Codigo AUTHID DEFINER
AS
PROCEDURE Procedimiento1;
PRAGMA DEPRECATE (Procedimiento1,
'pkg_Codigo.Procedimiento1 deprecado. Utilice pkg_Codigo.Procedimiento2');
--
PROCEDURE Procedimiento2;
END;
SP2-0808: Package created with compilation warnings
El mensaje de error ahora nos indica que la entidad que se encuentra marcada como obsoleta es el procedimiento "PROCEDIMIENTO1" y no el paquete completo.
SQL> SHOW ERRORS
Errors for PACKAGE PKG_DEPRECADO:
LINE/COL ERROR
-------- -------------------------------------------------------
4/3 PLW-06019: entity PROCEDIMIENTO1 is deprecated
¿Qué significa cada mensaje de Advertencia?
A continuación tenemos la definición oficial de cada uno de los cuatro mensajes de advertencia o error relacionados con "PRAGMA DEPRECATE"
Advertencia 6019
La advertencia (o error) 6019, como vimos al compilar los dos paquetes anteriores, ocurrirá cada vez que compilemos un objeto que se ecuentra "marcado" como obsoleto con la instrucción "PRAGMA DEPRECATE".
Advertencia 6020
La advertencia (o error) 6020 ocurrirá cada vez que compilemos un objeto que referencia a otro que se encuentra "marcado" como obsoleto con la instrucción "PRAGMA DEPRECATE".
Siguiendo con el ejemplo anterior, si intentamos compilar un procedimiento que referencia al procedimiento "Procedimiento1" del paquete "pkg_Codigo", obtendremos la advertencia 6020:
CREATE OR REPLACE PROCEDURE Usar_Procedimiento_Deprecado
IS
BEGIN
pkg_codigo.procedimiento1;
END;
/
SP2-0804: Procedure created with compilation warnings
SQL> SHOW ERRORS
Errors for PROCEDURE USAR_PROCEDIMIENTO_DEPRECADO:
LINE/COL ERROR
-------- -----------------------------------------------------------------
4/4 PLW-06020: reference to a deprecated entity: PROCEDIMIENTO1
declared in unit PKG_CODIGO[3,13]. pkg_Codigo.Procedimiento1
deprecado. Utilice pkg_Codigo.Procedimiento2
Advertencia 6021
La advertencia (o error) 6021 ocurrirá si tratamos de compilar un objeto con una sentencia "PRAGMA DEPRECATE" ubicada en un lugar incorrecto, como podemos ver en el siguiente ejemplo:
CREATE OR REPLACE PACKAGE MiPaquete AUTHID DEFINER AS
--
PRAGMA DEPRECATE(CalculaTotal);
--
CURSOR c_cursor IS
SELECT dummy FROM dual;
--
PROCEDURE CalculaTotal;
--
END MiPaquete;
/
SP2-0808: Package created with compilation warnings
SQL> SHOW ERRORS
Errors for PACKAGE MIPAQUETE:
LINE/COL ERROR
-------- -----------------------------------------------------------------
3/10 PLW-06021: PRAGMA DEPRECATE on CALCULATOTAL is misplaced
Advertencia 6022
La advertencia (o error) 6022 indica que estamos tratando de marcar como obsoleto un objeto que no puede ser marcado como obsoleta. Esto puede ocurrir si marcamos como obsoleto un procedimiento o función interna (declarada dentro de otro procedimiento o función), como podemos ver en el siguiente ejemplo:
CREATE OR REPLACE PROCEDURE Error6022
IS
PROCEDURE Error6022_Interno
IS
PRAGMA DEPRECATE (Error6022_Interno, 'Error6022_Interno es Obsoleto');
BEGIN
DBMS_OUTPUT.PUT_LINE('Probando Error6022_Interno');
END;
BEGIN
--
DBMS_OUTPUT.PUT_LINE('Probando Error6022');
--
Error6022_Interno;
--
END;
Warning: PROCEDURE ERROR6022
Line: 5 PLW-06022: cannot use PRAGMA DEPRECATE on this entity
No hay comentarios.:
Publicar un comentario