Oracle

Tipos de datos en PL/SQL

Por : Jhons_1101
2017-06-06
Tags :
Cada constante, variable o parámetro tiene un tipo de datos (TYPE), que especifica un formato de almacenamiento, restricciones y un rango válido de valores. PL/SQL proporciona muchos tipos de datos predefinidos entre los cuales se destacan tipos de dato enteros (INTEGER), de coma flotante (NUMBER), carácter (VARCHAR2), Boolenao (BOOLEAN), fecha (DATE), colección, referencia y objetos grandes, entre otros.

  • CHAR [(longitud máxima)]
  • VARCHAR2(longitud máxima)
  • LONG
  • LONG RAW
  • NUMBER [(precisión, escala)]
  • BINARY_INTEGER
  • PLS_INTEGER
  • BOOLEAN
  • BINARY_FLOAT
  • BINARY_DOUBLE

  • A continuación se muestran los TIPOS de DATOS más comunes:


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

    Tipos de dato numérico.


    Permiten almacenar datos numéricos (números enteros, reales y de punto flotante). Se recomienda usar sólo el valor de un NUMBER literal o el resultado de un cálculo NUMBER que contenga dentro del rango especificado. (Precisión). Si el valor del cálculo literal o NUMBER es menor que el rango, el valor se redondea a cero (0). Si por el contrario el valor del literal excede el límite superior, se genera un error de compilación (ORA-01438: value larger than specified precision allows for this column).

    
    DECLARE 
      NUMBER[(precisión,escala)] 
      -- En donde ‘precisión’ es la longitud de dígitos numéricos y 
      -- ‘Escala’ la cantidad de decimales posibles. 
    BEGIN 
      -- Bloque de código 
    END;
    
    


    No puede utilizar constantes o variables para especificar precisión y escala; Debe utilizar literales enteros.
    Ejemplo.

    
    DECLARE 
      lnu_precisión NUMBER := 10; 
      lnu_escala    NUMBER := 2; 
      lnu_totalFacturas NUMBER(lnu_precisión,lnu_escala) := 123456.00; 
    BEGIN 
      -- Bloque de código 
      -- Esto va a generar un error de compilación (PLS-00491: numeric literal required) 
    END;
    
    

  • Subtipos datos Numéricos

  • DEC
  • DECIMAL
  • DOUBLE PRECISION
  • FLOAT
  • INT
  • BINARY_INTEGER
  • INTEGER
  • NUMERIC
  • REAL
  • SMALLINT

  • * Utilice los subtipos DEC, DECIMAL y NUMERIC para declarar números de punto fijo con una precisión máxima de 38 dígitos decimales.

    * Utilice los subtipos DOUBLE PRECISION y FLOAT para declarar números de punto flotante con una precisión máxima de 126 dígitos.

    * Utilice el subtipo REAL para declarar números de punto flotante con una precisión máxima de 63 dígitos.

    * Utilice los subtipos INTEGER, INT y SMALLINT para declarar números enteros con una precisión máxima de 38 dígitos decimales.

    
    DECLARE 
      lnu_edad    NUMBER(10) := 20; 
      lnu_salario NUMERIC(15) := 1200000; 
      lnu_porcentajePago FLOAT(2) := 74561458.09; 
    BEGIN 
      -- Bloque de código 
    END;
    
    

    Tipos de dato cadena.


    Los tipos de dato cadena permiten almacenar datos alfanuméricos, representar palabras, texto y manipular cadenas de caracteres. Existen diversos subtipos de datos que almacenan gran cantidad de datos y priorizan precisión y texto.

  • CHAR
  • LONG
  • LONG RAW
  • RAW
  • ROWID
  • UROWID
  • VARCHAR2
  • NCHAR
  • NVARCHAR2
  • BFILE
  • BLOB
  • CLOB
  • NCLOB

  • * Utilice el tipo de datos CHAR para almacenar datos de caracteres de longitud fija. No puede utilizar una constante simbólica o una variable para especificar el tamaño máximo. Si no especifica un tamaño máximo, el valor predeterminado es 1.

    * Utilice el tipo de datos LONG para almacenar cadenas de caracteres de longitud variable. El tipo de datos LONG es como el tipo de datos VARCHAR2, excepto que el tamaño máximo de un valor LONG es 32760 bytes.

    * Utilice el tipo de datos LONG RAW para almacenar datos binarios o cadenas de bytes. Los datos LONG RAW son como los datos LONG, excepto que los datos LONG RAW no son interpretados por PL/SQL. El tamaño máximo de un valor LONG RAW es 32760 bytes.

    * Utilice el tipo de datos RAW para almacenar datos binarios o cadenas de bytes.
    Por ejemplo, una variable RAW puede almacenar una secuencia de caracteres gráficos o una imagen digitalizada.

    Internamente, cada tabla de base de datos Oracle tiene una pseudocolumna llamada ROWID, que almacena valores binarios llamados ROWIDS, que es un identificador único de un registro en toda la base de datos. El tipo de datos ROWID puede almacenar sólo ROWIDS físicos, es decir no es modificable para el usuario. Sin importar los permisos de ejecución.

    * Utilice el tipo de datos VARCHAR2 para almacenar datos de caracteres de longitud variable, toma un parámetro requerido que especifica un tamaño máximo de 32767 bytes. No puede utilizar una constante simbólica o una variable para especificar el tamaño máximo.

    Las variables pequeñas están optimizadas para el rendimiento.
    Aunque las variables de caracteres PL/SQL pueden ser relativamente largas, no puede insertar valores VARCHAR2 mayores de 4000 bytes. Si se requiere de cantidades gigantes de datos, se recomienda usar LONG.

    
    DECLARE 
      lvc_nomAfiliado1 VARCHAR2(50); 
      lvc_nomAfiliado2 VARCHAR2(50); 
      lvc_imagenAfilia LONG; 
    BEGIN 
      -- Bloque de código 
    END;
    
    

    Los tipos de datos LOB (objeto grande) BFILE, BLOB, CLOB y NCLOB permiten almacenar bloques de datos no estructurados, como texto, imágenes gráficas, videoclips y formas de onda de sonido. Los tipos LOB difieren de los tipos LONG y LONG RAW de varias maneras. Por ejemplo, los LOB (excepto NCLOB) pueden ser atributos de un tipo de objeto, pero LONGs no. El tamaño máximo de un BLOB, CLOB o NCLOB es de 8 a 128 terabytes, pero el tamaño máximo de un LONG es de 2 gigabytes.


    Este es un tema muy extenso y complejo, dejo el enlace de la documentación oficial, para que la chequeen más a fondo. https://docs.oracle.com/cd/B19306_01/appdev.102/b14249/adlob_intro.htm#ADLOB001

    * Utilice el tipo de datos BFILE para almacenar objetos binarios grandes en archivos de sistema operativo fuera de la base de datos. Cada variable BFILE almacena un localizador de archivos, que apunta a un archivo binario grande en el servidor, los BFILE no participan en transacciones, no son recuperables y no pueden ser replicados. El número máximo de BFILE abiertos se establece mediante el parámetro de inicialización de Oracle SESSION_MAX_OPEN_FILES, que depende del sistema.

    * Utilice el tipo de datos BLOB para almacenar objetos binarios grandes en la base de datos, en línea o fuera de línea. Los BLOBs participan plenamente en transacciones, son recuperables y pueden ser replicados. Los cambios realizados por el paquete DBMS_LOB pueden ser confirmados o cancelados.

    * Utilice el tipo de datos CLOB para almacenar grandes bloques de datos de caracteres en la base de datos, en línea o fuera de línea. Se admiten conjuntos de caracteres de ancho fijo y variable. Participan plenamente en las transacciones, son recuperables y pueden ser replicados.

    * Utilice el tipo de datos NCLOB para almacenar grandes bloques de datos NCHAR en la base de datos. Cada variable NCLOB almacena un localizador, que apunta a un gran bloque de datos NCHAR.

    Tipo de datos booleanos


    PL/SQL tiene un tipo de dato para representar valores booleanos (verdadero y falso). Debido a que SQL no tiene un tipo equivalente, puede usar variables y parámetros BOOLEAN en contextos PL/SQL pero no se pueden usar dentro de sentencias o consultas SQL (Selects , Inserts…).

    Utilice el tipo de datos BOOLEAN para almacenar los valores lógicos TRUE, FALSE y NULL. Sólo se permiten para realizar operaciones lógicas con las variables. OJO Las funciones llamadas desde una consulta SQL no pueden tomar ningún parámetro BOOLEAN.

    
    DECLARE
      lbl_error BOOLEAN := false;
    BEGIN
      -- Bloque de código
      IF (lbl_error) THEN
        -- Si no hubo errores
      ELSE
        -- Si falló algo en el proceso
      END IF;
    END;
    
    

    Tipo de dato Fecha


    Los tipos de datos de esta sección le permiten almacenar y manipular fechas, horas e intervalos (períodos) de tiempo. Una fecha o intervalo consta de campos, que determinan su valor. Utiliza el tipo de datos DATE para almacenar fechas de duración fija.

    Para comparar igualdad de fechas, independientemente de la parte de tiempo de cada fecha se situé, utilice el resultado de función reservada TRUNC (variable) en comparaciones y/o operaciones. Si lo que se desea es cortar el formato de la fecha, también puede usarse TRUNC (variable).

    Si se requiere pasar una variable o valor fecha a cadena de texto, se debe de utilizar la función reservada TO_CHAR (variable), caso contrario, si se tienen una fecha en una cadena de texto y requiere cambiar el formato o hacer operaciones, debe utilizarse la función TO_DATE(variable).

    Se pueden sumar y restar o hacer cálculos de fechas. PL/SQL interpreta literales enteros como días meses, años, horas, minutos para realizar la operación. Veamos la siguiente tabla.

    
    DECLARE
      lfd_fec_nac  DATE;
      lfd_fec_pago DATE;
      ldf_hoy      DATE;
    BEGIN
      -- Bloque de código
      lfd_fec_nac := TO_DATE('01/01/1989','DD/MM/YYYY');
      lfd_fec_pago:= TO_DATE('15/06/2017','DD/MM/YYYY');
      ldf_hoy     := SYSDATE;
    END;
    
    


    Nombre Valores permitidos
    YEAR (AÑO) Cualquier año mayor a 1970.
    MONTH (MES) 01 a 12
    DAY (DÍA) 01 a 31 (Limitado por los valores de MES y AÑO, según las reglas del calendario para la localidad)
    HOUR (HORA) 00 a 23
    MINUTE (MINUTOS) 00 a 59
    SECOND (SEGUNDOS) 00 a 59.9(n),, En donde 9(n) es la precisión del tiempo en fraccionarios






    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)

    3FINEl6





    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.....