Tablas PL/SQL

Declaración de tablas de PL/SQL

    Las tablas de PL/SQL son tipos de datos que nos permiten almacenar varios valores del mismo tipo de datos.

    Una tabla PL/SQL :

  • Es similar a un array
  • Tiene dos componenetes: Un índice de tipo BINARY_INTEGER que permite acceder a los elementos en la tabla PL/SQL y una columna de escalares o registros que contiene los valores de la tabla PL/SQL
  • Puede incrementar su tamaño dinámicamente.

    La sintaxis general para declarar una tabla de PL es la siguiente:


TYPE <nombre_tipo_tabla> IS TABLE OF
<tipo_datos> [NOT NULL]
INDEX BY BINARY_INTEGER ;

    Una vez que hemos definido el tipo, podemos declarar variables y asignarle valores.


DECLARE
/* Definimos el tipo PAISES como tabla PL/SQL */
TYPE
PAISES IS TABLE OF NUMBER INDEX BY BINARY_INTEGER ;
/* Declaramos una variable del tipo PAISES */
tPAISES PAISES;
BEGIN
tPAISES(1) := 1;
tPAISES(2) := 2;
tPAISES(3) := 3;
END;


     No es posible inicializar las tablas en la inicialización.

     El rango de binary integer es –2147483647.. 2147483647, por lo tanto el índice puede ser negativo, lo cual indica que el índice del primer valor no tiene que ser necesariamente el cero.


Tablas PL/SQL de registros

    Es posible declarar elementos de una tabla PL/SQL como de tipo registro.


DECLARE

TYPE
PAIS IS RECORD
(
CO_PAIS NUMBER NOT NULL ,
DESCRIPCION VARCHAR2(50),
CONTINENTE VARCHAR2(20)
);
TYPE PAISES IS TABLE OF PAIS INDEX BY BINARY_INTEGER ;
tPAISES PAISES;
BEGIN

tPAISES(1).CO_PAIS := 27;
tPAISES(1).DESCRIPCION := 'ITALIA';
tPAISES(1).CONTINENTE := 'EUROPA';


END;


Funciones para el manejo de tablas PL/SQL

    Cuando trabajamos con tablas de PL podemos utilizar las siguientes funciones:

  • FIRST. Devuelve el menor índice de la tabla. NULL si está vacía.
  • LAST. Devuelve el mayor índice de la tabla. NULL si está vacía.

    El siguiente ejemplo muestra el uso de FIRST y LAST : 


DECLARE
 TYPE ARR_CIUDADES IS TABLE OF VARCHAR2(50) INDEX BY BINARY_INTEGER;
 misCiudades ARR_CIUDADES;
BEGIN
     misCiudades(1) := 'MADRID';
     misCiudades(2) := 'BILBAO';
     misCiudades(3) := 'MALAGA';
    
     FOR i IN misCiudades.FIRST..misCiudades.LAST
     LOOP
         dbms_output.put_line(misCiudades(i));
     END LOOP;
END;

  • EXISTS(i). Utilizada para saber si en un cierto índice hay almacenado un valor. Devolverá TRUE si en el índice i hay un valor.


DECLARE
 TYPE ARR_CIUDADES IS TABLE OF VARCHAR2(50) INDEX BY BINARY_INTEGER;
 misCiudades ARR_CIUDADES;
BEGIN
     misCiudades(1) := 'MADRID';    
     misCiudades(3) := 'MALAGA';
    
     FOR i IN misCiudades.FIRST..misCiudades.LAST
     LOOP
         IF misCiudades.EXISTS(i) THEN
           dbms_output.put_line(misCiudades(i));
         ELSE
           dbms_output.put_line('El elemento no existe:'||TO_CHAR(i));
         END IF
     END LOOP;
END;

  • COUNT. Devuelve el número de elementos de la tabla PL/SQL.


DECLARE
 TYPE ARR_CIUDADES IS TABLE OF VARCHAR2(50) INDEX BY BINARY_INTEGER;
 misCiudades ARR_CIUDADES;
BEGIN
     misCiudades(1) := 'MADRID';    
     misCiudades(3) := 'MALAGA';
     /* Devuelve 2, ya que solo hay dos elementos con valor */
     dbms_output.put_line(
'El número de elementos es:'||misCiudades.COUNT);   
END;

  • PRIOR (n). Devuelve el número del índice anterior a n en la tabla.


DECLARE
  TYPE
ARR_CIUDADES IS TABLE OF VARCHAR2(50) INDEX BY BINARY_INTEGER;
  misCiudades ARR_CIUDADES;
BEGIN
  misCiudades(1) := 'MADRID';
  misCiudades(3) := 'MALAGA';
  /* Devuelve 1, ya que el elemento 2 no existe */
  dbms_output.put_line(
'El elemento previo a 3 es:' || misCiudades.PRIOR(3));
END;

  • NEXT (n). Devuelve el número del índice posterior a n en la tabla.


DECLARE
  TYPE
ARR_CIUDADES IS TABLE OF VARCHAR2(50) INDEX BY BINARY_INTEGER;
  misCiudades ARR_CIUDADES;
BEGIN
  misCiudades(1) := 'MADRID';
  misCiudades(3) := 'MALAGA';
  /* Devuelve 3, ya que el elemento 2 no existe */
  dbms_output.put_line(
'El elemento siguiente es:' || misCiudades.NEXT(1));
END;

  • TRIM. Borra un elemento del final de la tabla PL/SQL.
  • TRIM(n) borra n elementos del final de la tabla PL/SQL.
  • DELETE. Borra todos los elementos de la tabla PL/SQL.
  • DELETE(n) borra el correspondiente al índice n.
  • DELETE(m,n) borra los elementos entre m y n.

 

Pedro  Herrarte  Sánchez
Tablas PL/SQL
Pedro Herrarte Sánchez

Pedro Herrarte, es consultor independiente, ofreciendo servicios de consultoría, análisis, desarrollo y formación. Posee mas de diez años de experiencia trabajando para las principales empresas de España. Es especialista en tecnologías .NET, entornos Web (ASP.NET, ASP.NET MVC,jQuery, HTML5), bases de datos (SQL Server y ORACLE) e integración de sistemas. Es experto en desarrollo (C#, VB.Net, T-SQL, PL/SQL, , ASP, CGI , C, Pro*C, Java, Essbase, Vignette, PowerBuilder y Visual Basic ...) y bases de datos (SQL Server y ORACLE). Pedro es MCP y MAP 2012, es fundador, diseñador y programador de www.devjoker.com..
Fecha de alta:14/07/2006
Última actualizacion:14/07/2006
Visitas totales:241105
Valorar el contenido:
Últimas consultas realizadas en los foros
Últimas preguntas sin contestar en los foros de devjoker.com