InicioArticulos y noticiasBases de datosProgramaciónForosInternetServiciosContratacionEmail
Tutorial PL/SQL
Introducción a PLSQL
Programación con PL/SQL
Fundamentos de PL/SQL
Tipos de datos en PL/SQL
Operadores en PL/SQL
Estructuras de control en PL/SQL
Bloques PL/SQL
Cursores en PL/SQL
Cursores Implicitos en PL/SQL
Cursores Explicitos en PL/SQL
Cursores de actualización en PL/SQL
Excepciones en PL/SQL
Excepciones personalizadas en PL/SQL
Propagacion de excepciones en PL/SQL
Subprogramas en PL/SQL
Procedimientos almacenados en PL/SQL
Funciones en PL/SQL
Triggers en PL/SQL
Subprogramas en bloques anónimos
Paquetes en PL/SQL
Registros PL/SQL
Tablas PL/SQL
Tipo VARRAY
BULK COLLECT
Transacciones con PL/SQL
Transacciones autónomas
SQL Dinamico
Funciones integradas de PL/SQL
Secuencias
PL/SQL y Java
También puedes ver ...
Excepciones personalizadas en PL/SQL
Como conectar a ORACLE con Java
Recuperar datos BLOB de ORACLE
Trabajar con datos de tipo BLOB en ORACLE
PL/SQL y Java
Secuencias
Transacciones autónomas
SQL Dinamico
Funciones integradas de PL/SQL
Transacciones con PL/SQL

Afiliados
La Web del programador
MundoProgramacion


 

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.

 


Inicio | Tutorial PL/SQL Registros PL/SQLTutorial PL/SQLTipo VARRAY Versión para imprimir Foros de consulta

 
TYPE PAISES IS TABLE OF PAIS... por Anónimo
Respuesta recibida el [03/08/2007 03:03:39]
  TYPE PAISES IS TABLE OF PAIS INDEX BY BINARY_INTEGER ;
tPAISES PAISES;
BEGIN

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

END;
En este codigo, no deberia ser:

tPAISES(1).CO_PAIS ...
en lugar de
miPAIS(1).CO_PAIS

???????

 
Cierto y corregido.... por Devjoker
Respuesta recibida el [04/08/2007 09:16:33]
Cierto y corregido.

 
consulta de funcion y tabla por JOHN barril
Respuesta recibida el [14/08/2007 11:45:49]
Felicitaciones por el sitio. Miconsulta es si puedo retornar una tabla pl/sql como resultado de una función y rescatarla con algún lenguaje de programación como Java.

 
PL/SQL-ORACLE por Garamir
Respuesta recibida el [16/10/2007 09:54:32]
Hola Pedro,necesito saber como hacer para transportar una B.D. desde una aplicación PL/SQL a una B.D. Oracle  10 G.
Desde ya muchas gracias por tu valiosa colaboración. Saludos

 
Previo a 3? por Leandro
Respuesta recibida el [18/10/2007 06:30:50]
donde dice:
"dbms_output.put_line('El elemento previo a 3 es:' || misCiudades.NEXT(1));"

no deberia decir "El elemento proximo a 1 es : misCiudades.NEXT(1)"

 
oli por reneitor el makina
Respuesta recibida el [19/11/2007 09:57:06]
PeneLico sql me excita :B

 
Creacion de arrays en forms por nel
Respuesta recibida el [01/02/2008 07:31:24]
Deseo crear un vector o array en form builder y no se como definirla
gracias

 
Esto esta mal, cierto ? por Alejandro
Respuesta recibida el [21/02/2008 08:58:13]
'El elemento previo a 3 es:' || misCiudades.NEXT(1));
END; ?????

solo hacer notar ese detallito

 
Visto y corregido!... por devjoker
Respuesta recibida el [22/02/2008 05:30:05]
Visto y corregido!

 
necesito una gran ayuda por osvaldo
Respuesta recibida el [09/05/2008 11:34:48]
hola soy de puebla estoy estudiando en estos momentos oracle 10g aunque no se me damucho me interesa saber programar bases de datos quisiera saber si me podrian ayudar de antemano mil gracias y espero una pronta respuesta 
pd
mi talon de aquiles es lo mas basico las relaciones de identidades e identificar las llaves por favor ayudenme mi correo es zherezar@hotmail.com

 
Tabla de tablas por Julio
Respuesta recibida el [23/05/2008 05:15:36]
Hola estoy intentando hacer una tabla de tablas de varchar2. Es decir una matriz de varchar2 y al intentar asignar un valor a la posicion (0)(0) me dice:
Subscript outside of limit
He inicializado antes la variable con un constructor con el mismo nombre que el tipo.
Algo como esto:

v_matriz := tt_generico();

donde:
TYPE tt_generico IS TABLE OF t_generico;

TYPE t_generico IS TABLE OF varchar2(600);

La definicion se haria de otra manera? O me estoy dejando algo?
Un saludo,
Gracias.

 
Tablas y cursores por Edgar
Respuesta recibida el [08/08/2008 09:55:06]
Hola, estoy desarrolloando una aplicación en ColdFusion y me conecto a Oracle, estoy usando procedimientos almacenados para mis consultas, en el procedimiento, utilizo algo como esto para enviar el resultado de la consulta

OPEN cur FOR
SELECT * FROM miTABLA

donde cur es un parámetro de salida de mi procedimiento almacenado. Todo esto funciona muy bien, no tengo problemas.

El asunto es que ahora quisiera realizar una serie de operaciones antes de devolver la tabla, así que se me ocurre crear un tipo RECORD con los campos que voy a procesar e ir colocando cada registro en una tabla. Bueno, hasta aquí vamos bien, pero ahora como saco los resultados de la tabla para poder recuperarlos desde mi aplicacion. El dbms_output.put_line no me sirve para lo que yo quiero, pensaba en algo como esto

OPEN cur FOR
SELECT * FROM miTABLAconRECORDS

pero esto no funciona. Alguna idea de como poder realizar esto??

De antemano gracias y felicidades, es un excelente trabajo el que tu haces...

 
Hacer de una tabla otra tabla por Idalia
Respuesta recibida el [15/08/2008 12:45:10]
Como se le hace para tomar datos de una tabla creada y crear otra; es decir..
la base de datos es muy lenta entonces tuve cque crear unas tablas en pl pero aun asi tarda muchisimo.
entonces necesito hacer una consulta muy general y guardarla en una tabla para despues llenar la otra tabla con calculos de esta y asi hace r menos consultas a la base de datos y agilizar el proceso, porke mas menos se tarda 2 hrs en leer 1026 registos..
si tienes algo que pueda ayudarme te lo agradeceria..


Añadir comentario ... Para preguntar utiliza los foros
Autor:

Título:


Para preguntar utiliza los foros.



Inicio | Tutorial PL/SQL Registros PL/SQLTutorial PL/SQLTipo VARRAY Versión para imprimir

Tablas PL/SQL
Autor: Pedro Herrarte Sánchez
Visitas: 38501 Fecha de publicación: 14/07/2006
Pedro Herrarte, es consultor independiente, ofreciendo sercivios 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, bases de datos (SQL Server y ORACLE) e integración de sistemas.

Es experto en desarrollo (C#, ASP.NET, 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).

Es fundador, diseñador y programador de www.devjoker.com.




18/08/2008 SQL Server 2008
Visitas: 39 | Comentarios: 0 | Archivo: Articulos
Categorias: Transact-SQL
Visitas: 131 | Comentarios: 0 | Archivo: Articulos
Categorias: C#|ADO.NET|LinQ
Visitas: 161 | Comentarios: 1 | Archivo: Articulos
Categorias: Humor
Visitas: 154 | Comentarios: 0 | Archivo: Articulos
Categorias: WCF
Visitas: 123 | Comentarios: 0 | Archivo: Articulos
Categorias: WCF
Visitas: 210 | Comentarios: 0 | Archivo: Articulos
Categorias: ASP.NET
Visitas: 278 | Comentarios: 5 | Archivo: Articulos
Categorias: ASP.NET
Visitas: 4990 | Comentarios: 4 | Archivo: Articulos
Categorias: C#|Transact-SQL|LinQ
Visitas: 602 | Comentarios: 1 | Archivo: Articulos
Categorias: Visual Studio
Visitas: 1402 | Comentarios: 1 | Archivo: Articulos
Categorias: Transact-SQL

Útimos temas recibidos en los foros ...
Y lo mismo en WEB por systemat ... [C#] 1 18/08/2008
Manual del minicom de Linux con fotos. por Meta ... [UNIX] 4 17/08/2008
PROGRAMACION por JUANMA ... [Visual Basic .NET] 1 19/08/2008
Conectar ASP con B.D Informix por Franco ... [ASP] 9 02/05/2007
Codigo salir por Jazmin ... [ASP.NET] 1 18/08/2008
EXPORTAR DATOS A ARCHIVOS PLANOS. por WIX ... [ORACLE] 10 06/08/2007
formulario por artdark ... [C#] 2 04/08/2008
Codigo salir por Jazmin ... [ASP.NET] 0 18/08/2008
cambiar de modo un gried view por ivan ... [ASP.NET] 0 18/08/2008
ayuda urgente porfavor por vicancer ... [ASP.NET] 0 18/08/2008
pollo por hajaj ... [Actualidad] 1 15/08/2008
DIOS TE BENDIGA por El You ... [WIN 98/NT/2000/XP] 1 16/08/2008

Access CGI JSP ORACLE UNIX
Actualidad HTML/DHTML/XHTML LINUX PHP Visual Basic .NET
ASP ISAPI MS DOS Power Builder Visual Basic 6.0
ASP.NET Java mySQL SQL WIN 98/NT/2000/XP
C# JavaScript Opinion SQL Server

devjoker  Te recomendamos además ...
11/09/2006 Trabajar con datos de tipo BLOB en ORACLE
06/07/2007 ¿Qué es el RSS?    forma parte de...Tutorial RSS
26/07/2006 Secuencias    forma parte de...Tutorial PL/SQL
18/10/2005 Enviar emails a través de un servidor SMTP autenticado con Java
08/09/2007 Funciones en Transact SQL    forma parte de...Tutorial de Transact SQL
12/01/2006 Introducción a PLSQL    forma parte de...Tutorial PL/SQL
08/07/2008 Fiddler - Indispensable para el desarrollo Web
13/08/2007 Reiniciar un campo identity en SQL Server
22/10/2005 Introducción SQL    forma parte de...Tutorial SQL
03/10/2006 Fundamentos de C#    forma parte de...Tutorial C#

 

Encuesta
Si trabajas con .NET ¿Que entorno utilizas?
[Ver] [Votar]