Oracle

Declaración de variables en PL/SQL

Por : Jhons_1101
2017-06-06
Tags :
Se pueden definir variables y constantes. A medida que el programa se ejecuta, los valores de las variables pueden cambiar, más no los valores de las constantes.
Estas se deben emitir en la parte declarativa de cualquier bloque PL/SQL, subprograma o paquete.

Se les debe declarar el espacio máximo de almacenamiento para su valor, su tipo de datos (NUMBER; DATE, VARCHAR2, etc..), y el nombre de la ubicación si es una declaración de un elemento ya existente (Campo de tabla, función de un paquete, etc…).
Importante saber que podemos hacer operaciones con las variables declaradas anteriormente…
Por defecto, las variables se inicializan en NULL, por lo que es redundante incluir := NULL en una declaración de variables. Basta con enunciar el nombre de la variable y el tipo de dato.

DECLARE 
  lnu_cantDiasMaximo NUMBER      := paqueteParametro.getParametroNumerico(123); 
  lvc_primerNombre VARCHAR2(45)  := UPPER('juan'); 
  lvc_segundoNombre VARCHAR2(45) := UPPER('josé'); 
  lvc_nombreCompleto VARCHAR2(90):= lvc_primerNombre|| ' ' ||lvc_segundoNombre; 
  lnu_contador NUMBER; 
BEGIN 
  -- Bloque de código 
  dbms_output.put_line (lvc_nombreCompleto); 
END;

compartir en facebook compartir en Google compartir en Twitter compartir en Blogger compartir como código embebido compartir la url

Constantes

Para declarar una constante, se poner la palabra clave CONSTANT antes de especificar el tipo de dato.
Una constante se debe inicializar en la declaración del bloque PL/SQL, subprograma o paquete. De lo contrario, se produce un error de compilación. También se puede utilizar DEFAULT para inicializar los parámetros de subprograma, parámetros de cursor, y campos de un registro definido por el usuario.



DECLARE
  limite_credito   CONSTANT REAL    := 5000.00;
  max_days_in_year CONSTANT INTEGER := 366;
  urban_legend     CONSTANT BOOLEAN := FALSO;
BEGIN
  -- Bloque de código
END;


Usando el DEFAULT

Se puede utilizar la palabra clave DEFAULT antes del operador de asignación para inicializar variable en la declaración o como parámetro de entrada.
Veamos un ejemplo...



DECLARE 
  lnu_tieneError NUMBER; 
  -- La variable ‘lnu_tieneError’ puede definirse con un valor inicial como… 
  lnu_tieneError NUMBER DEFAULT := 0; 
BEGIN 
  --Bloque de código 
END;


Usando el NOT NULL

Además de asignar un valor inicial, las declaraciones pueden imponer la restricción NOT NULL. No se puede asignar nulos a una variable definida como NOT NULL. Si lo implementa, PL/SQL levanta la excepción predefinida (Oracle / PLSQL: Mensaje de error ORA-06550)VALUE_ERROR. Siempre la restricción NOT NULL debe ir seguida de una cláusula de inicialización (:=).

Veamos...


DECLARE 
  lnu_varError NUMBER (4) NOT NULL; 
  –-Generará error al no tener una asignación y definirse como NOT NULL 
BEGIN 
  -- Bloque de código 
END;

Mensaje de error ORA-06550

Usando el atributo %TYPE

El atributo %TYPE proporciona el tipo de datos de una columna dentro de una tabla en la base de datos.
Las variables declaradas con %TYPE heredan el tipo de datos de su raiz, sus valores por default y restricciones predeterminadas.
Ejemplo... longitud del campo, valores Enum, valor por default.. etc.


DECLARE 
  lnu_nomAfiliado1 TBL_AFILIADO.COD_TIPO_IDENTI%TYPE; 
  lnu_nomAfiliado2 VARCHAR2(50); 
BEGIN 
  -- Bloque de código
END;


  • Ventajas
  • * No se requiere conocer el tipo de dato de la columna en la tabla.
    * Si se cambia el tipo de dato en la columna, no deberemos modificar el PL/SQL. Siempre y cuando este no afecte. Es decir, si antes era Varchar2 y ahora es Number, de seguro generará error ya que puede existir un valor en DB con algun caracter alfanumerico que afecte el proceso. Debemos de ser cautelosos y precavidos con estos cambios.

    Usando el atributo %ROWTYPE

    El atributo %ROWTYPE proporciona un tipo de registro que representa una fila (registro) en una tabla o vista.
    Las columnas en una fila y los campos correspondientes en un registro tienen los mismos nombres y tipos de datos. Sin embargo, estos campos no heredarán las restricciones. Como la restricción NOT NULL o los valores predeterminados.

    Veamos...

    
    DECLARE 
      lrt_afiliados AFILIADOS%ROWTYPE; 
    BEGIN 
      lrt_afiliados.CODIGO  :=123456; 
      lrt_afiliados.NOMBRE1 :=’JUAN’
      lrt_afiliados.NOMBRE2 :=’ESTEBAN’; 
    END;
    
    

    Tambiénmbien se puede asignar una lista de valores de columna a un registro ROWTYPE mediante la instrucción SELECT.

    
    DECLARE 
      lrt_afiliados AFILIADOS %ROWTYPE; 
    BEGIN 
      SELECT * INTO lrt_afiliados FROM Afiliados 
      WHERE codigo = 123456; 
    END;
    
    

    Usando los Alias

    Las expresiones dentro de una consulta, pueden tener alias para identificarlas o para mejorar el entendimiento del Query.
    Muy habitual encontrarlo en la concatenación de dos o más columnas o después de enunciar una tabla. Se puede encontrar después del nombre del (los) campo (s) o después del nombre de la tabla. Para acceder a los atributos de la tabla de manera más rápida y corta. Se puede hacer de dos maneras, Usando la palabra reservada AS o sólo colocando una palabra despues del campo o del nombre de la tabla.

    Veamos los dos casos...

    
    -- Campos concatenados, renombrados por un alias (utilizando la palabra reservada AS)
    SELECT nm1_afiliado || ' ' || nm1_afiliado AS nombre_completo FROM afiliado; 
    
    -- Alias utilizado en una tabla para acceder a los campos.. (Sin la palabra reservada AS)
    -- los encontrarán muchos en los join de tablas para su mejor comprensión a la hora de la lectura
    SELECT A.nm1_afiliado, A.nm2_afiliado FROM afiliado A;
    
    





    Si este contenido te fue útil, no olvides compartirlo en redes sociales, Considéralo. Puede ser la manera de agradecer!


    Agrega tu comentario...

    Puedes utilizar etiquetas <pre></pre>, <p></p>, <div></div>, + (Nombre usuario, para responderle a alguien)

    9NpFOSq





    Este post no tiene comentarios, sé el primero en hacerlo
    Esta entrada no cuenta con imágenes adjuntas

    Unete al grupo de whatsApp +57 316 392 6456

    Sigue el grupo en facebook

    Siguenos.....