Es común encontrar en nuestras aplicaciones, lugares donde accedemos a tablas o vistas diccionario de datos de Oracle para obtener cierta información, por ejemplo:
SELECT t.table_name
INTO vTabla
FROM user_tables t
WHERE t.table_name like ‘T_%’
El tamaño máximo de los indicadores era, hasta Oracle 12c R2, de 30 caracteres, por lo que es frecuente encontrar que se definía a la variable “vTabla” de la siguiente forma:
DECLARE
vTabla VARCHAR2(30);
Pero, como ya vimos en el artículo anterior del blog, "Oracle 12c R2 - Identificadores de 128 Bytes", la Release 2 de Oracle 12c nos permite definir indicadores de hasta 128 caracteres de largo, por lo que es probable que nuestras aplicaciones que definían variables para almacenar indicadores con un largo fijo de 30 caracteres muy pronto comiencen a fallar con el siguiente error:
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
Afortunadamente, el cambio en el tamaño de los indicadores viene acompañado en Oracle 12c R2 de la posibilidad de declarar el largo de variables usando constantes. Por ejemplo, podemos definir un paquete de constantes y especificar en el mismo los valores que deseamos utilizar:
CREATE OR REPLACE PACKAGE pkg_constantes
AS
--
cn_largo_identificadores constant pls_integer := 128;
cn_largo_codigos constant pls_integer := 20;
cn_largo_cuit constant pls_integer := 11;
--
END pkg_constantes;
/
Y luego utilizar los mismos al momento de definir variables:
declare
vNombreTabla VARCHAR2(pkg_constantes.cn_largo_identificadores );
vCUIT NUMBER(pkg_constantes.cn_largo_cuit);
vCodigoCliente VARCHAR2(pkg_constantes.cn_largo_codigos);
Para simplificar nuestra tarea, la versión 12c R2 ya provee una constante declarada en el paquete “DBMS_STANDARD” llamada “ORA_MAX_NAME_LEN” la cual representa un valor de 128, por lo que nuestro primer ejemplo puede ser reformulado de la siguiente forma:
DECLARE
vTabla VARCHAR2(ORA_MAX_NAME_LEN);
Ejemplo y documentación adicional
- Ejemplo en Oracle Live SQL.
- Artículo en Blog de Steven Feuerstein
No hay comentarios.:
Publicar un comentario