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




Visitas: 131 | Comentarios: 0 | Archivo: Articulos
Categorias: Visual Basic .NET|C#|ASP.NET|ASP.NET|Programación|ADO.NET
27/09/2008 Navegando ....
Visitas: 56 | Comentarios: 0 | Archivo: Articulos
Categorias: Humor
Visitas: 171 | Comentarios: 0 | Archivo: Articulos
Categorias: Visual Basic .NET|C#|ASP.NET|ASP.NET|Programación|WCF
Visitas: 705 | Comentarios: 0 | Archivo: Articulos
Categorias: C#
Visitas: 176 | Comentarios: 0 | Archivo: Articulos
Categorias: JavaScript|ASP.NET
Visitas: 618 | Comentarios: 0 | Archivo: Articulos
Categorias: Windows XP|Linux|Windows Vista
Visitas: 404 | Comentarios: 0 | Archivo: Articulos
Categorias: Linux|BSD
Visitas: 213 | Comentarios: 0 | Archivo: Articulos
Categorias: Programación|Actualidad
18/08/2008 SQL Server 2008
Visitas: 1029 | Comentarios: 1 | Archivo: Articulos
Categorias: Transact-SQL
Visitas: 727 | Comentarios: 0 | Archivo: Articulos
Categorias: C#|ADO.NET|LinQ

Útimos temas recibidos en los foros ...
Crear una sesion de inicio por jhors ... [ASP.NET] 1 06/10/2008
Enviar email a correos cmo hotmail por Cajami ... [C#] 13 06/09/2007
Como mandar mensaje a Celular por Pako ... [C#] 23 13/03/2007
Casting por sara ... [Java] 1 06/10/2008
ORA-22288: file or LOB operation GetLength failed por heroga ... [ORACLE] 1 05/08/2008
Galeria de imagenes en Visual Web Developer por luis ... [ASP.NET] 0 06/10/2008
utilizar un ObjectDataSource por mari90 ... [ASP.NET] 4 25/10/2006
Llamar procedimientos almacenados por elmago ... [C#] 1 04/10/2008
Procesos huerfanos por cesarf283 ... [SQL Server] 2 11/07/2007
numero autogenerado por lucho ... [Visual Basic .NET] 17 10/01/2007
PUNTO DE VENTA por TIBURON ... [Access] 0 04/10/2008
Curso Visual Basic .NET en vídeo por martaz ... [Visual Basic .NET] 4 08/11/2007

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 ...
21/07/2007 Insertar datos en Transact SQL    forma parte de...Tutorial de Transact SQL
28/06/2006 Excepciones en PL/SQL    forma parte de...Tutorial PL/SQL
31/03/2006 Operadores en PL/SQL    forma parte de...Tutorial PL/SQL
04/03/2006 Bloques PL/SQL    forma parte de...Tutorial PL/SQL
08/09/2007 Funciones en Transact SQL    forma parte de...Tutorial de Transact SQL
01/04/2006 Estructuras de control en PL/SQL    forma parte de...Tutorial PL/SQL
22/10/2005 Indices    forma parte de...Tutorial SQL
21/02/2007 BULK COLLECT    forma parte de...Tutorial PL/SQL
02/10/2008 Creando cadenas de conexión ConnectionStrings en .net 3.5 o visual Studio 2008 usando SqlConnectionStringBuilder
12/01/2006 Programación con PL/SQL    forma parte de...Tutorial PL/SQL

 

Encuesta
¿A que perfil te adaptas mejor?
[Ver] [Votar]