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
Secuencias
PL/SQL y Java
SQL Dinamico
Transacciones autónomas
Funciones integradas de PL/SQL
Transacciones con PL/SQL


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

 
Hola Idalia, no entendi muy bi... por Mario
Respuesta recibida el [19/10/2008 09:58:50]
Hola Idalia, no entendi muy bien tu pregunta, pero si te tardas 2 horas en procesar 1000 registros lo primero que me viene a la mente es que no tienes creados los indices adecuados o incluso que no tienes indices.

 
insert pl/sql por laura
Respuesta recibida el [29/10/2008 03:45:09]
Hola a todos! estoy intentando insertar unos datos en una tabla q ya tengo creada, pero me da un error y no se si es xq nop uedo hacer el insert normal de sql en un bloque pl/sql...
alguien me puede ayudar??
muchas gracias de antemano

 
para laura por JRD
Respuesta recibida el [05/11/2008 03:32:05]
Verifica si tu tabla tiene restricciones de integridad, te pongo un ejemplillo sencillo espero que te sirva un saludo.

DECLARE
V_CONTADOR NUMBER := 7;
BEGIN
INSERT INTO TEMPORAL(COLUMNANUMERICA)
VALUES(V_CONTADOR);
END;
/

 
para laura por JRD
Respuesta recibida el [05/11/2008 03:38:02]
te envio la tabla sencilla.
CREATE TABLE TEMPORAL (COLUMNANUMERICA NUMBER(2));

 
Usando tipos table por Angel Q.
Respuesta recibida el [23/11/2008 12:47:24]
Se puede utilizar una variable de tipo table dentro del where de un select.De este modo:
declare
TYPE tab_bien IS TABLE OF NUMBER(10) INDEX BY BINARY_INTEGER;
v_a_bien tab_bien;
i integer;
begin
--estos valores los recibo concatenados en un varchar2
v_a_bien(1):=3100;
v_a_bien(2):=91;
v_a_bien(3):=1248;
v_a_bien(4):=958;
select count(*) into i from bien b where b.codbien in v_a_bien;
--ojo: no puedo colocar b.codbien in (3100,91,1248,958) pues estos valores vienen en un parametro
dbms_output.put_line('Cantidad: '+to_char(i));
end;
Gracias por la respuesta.

 
Devolver tabla por Seamonkey
Respuesta recibida el [10/12/2008 03:46:40]
Buenas, como se puede devolver una tabla creada en pl/sql?

 
Error de compilación de pkg, alguien que me pueda tirar un centro. por Jose Luis
Respuesta recibida el [09/01/2009 09:13:52]
begin

HystoryNoteNew := HISTORY_NOTE_TAB();
v_index := 0;

for i in HystoryNote.first..HystoryNote.last
loop


-- Check New or Old
select count(1) into v_count
from sa_service_request
where sa_service_request.attribute8 = HystoryNote(i).Attribute8
and sa_service_request.requested_date = HystoryNote(i).RequestedDate;
if v_count > 0 then

v_index := v_index + 1;

HystoryNoteNew(v_index) := HISTORY_NOTE_TYP( HystoryNote(i).CallDate,HystoryNote(i).CallerComments,HystoryNote(i).CreatedBy,
to_date(to_char(HistoryNote(i).RequestedDateStr)||' '||to_char( HistoryNote(i).RequestedTimeStr), 'DAY MON-DD-YY AM'),
HystoryNote(i).RequestedDateStr,HystoryNote(i).RequestedTimeStr,
HystoryNote(i).LastUpdateUser,HystoryNote(i).Attribute8);

-- RequestedDateStr := HistoryNoteNew(v_index).RequestedDateStr;
-- v_requested_date_final := to_date(HistoryNoteNew(v_index).RequestedDateStr||' '|| HistoryNoteNew(v_index).RequestedTimeStr, 'DAY MON-DD-YY AM'); /*si le saco esta linea me anda, el tema me parece que no anda con el to_date*/
-- HistoryNoteNew(HystoryNote.last).RequestedDate := to_date(HistoryNoteNew(HystoryNote.last).RequestedDateStr||' '|| HistoryNoteNew(HystoryNote.last).RequestedTimeStr, 'DAY MON-DD-YY AM');


end if;

end loop;

 
Columnas PL/SQL por Samuel
Respuesta recibida el [12/02/2009 08:42:46]
hola mi pregunta es como puedo recuperar el nombre y el tipo de las columnas de una tabla en PL/SQL

 
Al generar la tabla en un pack... por Anónimo
Respuesta recibida el [16/02/2009 11:15:24]
Al generar la tabla en un package requiero enviar el parametro type table como retorno, pero en el encabezado del package no me reconoce la variable denominada del tipo... 

 
METODO EXTEND por PIKAMORFO
Respuesta recibida el [19/02/2009 01:38:16]
perdona creo que te falto el metodo EXTEND , metodo inprescindible para poder añadir sucesivamente nuevos elementos a la tabla..

 
Devolver tabla creada pl-sql por Nelson G.A.
Respuesta recibida el [26/02/2009 01:55:38]
Bueno amigos, espero les sirva esta porción de código de como sacar una tabla creada en pl-sql:

/* Primero, declarar un Registro y luego un arreglo de registros*/
TYPE reg_Indicador IS RECORD
(
K_Region Cat_Region.K_Region%Type,
K_Centro Cat_Centro.K_Centro%Type,
K_SuperIntendencia Cat_SuperIntendencia.K_SuperIntendencia%Type,
Registrados Number,
Planeados Number,
Seguimiento Number,
Cerrados Number
);

TYPE tabla_Indicador IS TABLE OF reg_Indicador INDEX BY BINARY_INTEGER;

/* Posteriormente, crear un procedimiento que retorne la tabla de registros creada */

procedure ACT_Indicadores(pRegion IN Cat_Region.K_Region%Type Default Null,
pCentro IN Cat_Centro.K_Centro%Type Default Null,
pSuperIntendencia IN Cat_SuperIntendencia.K_SuperIntendencia%Type Default Null,
tab_Indicador in out tabla_Indicador) IS

/* Obteniendo todos los centros de trabajo */
CURSOR curCentros (Region IN Cat_Region.K_Region%Type Default Null,
Centro IN Cat_Centro.K_Centro%Type Default Null,
SuperIntendencia IN Cat_SuperIntendencia.K_SuperIntendencia%Type Default Null) IS
SELECT DISTINCT B.K_Centro, A.K_Region, C.K_SuperIntendencia
FROM Cat_Gerencia A JOIN Cat_Centro B ON A.K_Centro = B.K_Centro JOIN Cat_SuperIntendencia C ON C.K_Centro = B.K_Centro
WHERE B.Borrado = 'NO'
AND A.K_Region = CASE WHEN Region Is Null THEN A.K_Region ELSE Region END
AND A.K_Region > 0
AND C.K_SuperIntendencia > 0
AND B.K_Centro = CASE WHEN Centro Is Null THEN B.K_Centro ELSE Centro END
AND C.K_SuperIntendencia = CASE WHEN SuperIntendencia Is Null THEN C.K_SuperIntendencia ELSE SuperIntendencia END
ORDER BY 2,1,3;

v_Region Number;
v_Centro Number;
v_SuperIntendencia Number;
filaCentro curCentros%RowType;

Indice Number;

t_Indicador tabla_Indicador;

BEGIN

IF (pRegion Is Not Null) THEN

/* Obteniendo los indicadores para una region */
Indice:= 1;
v_Region:= pRegion;
v_Centro:= null;
v_SuperIntendencia:= null;

/* Obtener todas las SuperIntendencias de la Region-Centro */
FOR filaCentro IN curCentros(v_Region, v_Centro, v_SuperIntendencia) LOOP

-- Agregando elementos a la tabla temporal
t_Indicador(Indice).K_Region:= filaCentro.K_Region;
t_Indicador(Indice).K_Centro:= filaCentro.K_Centro;
t_Indicador(Indice).K_SuperIntendencia:= filaCentro.K_SuperIntendencia;
t_Indicador(Indice).Registrados:= ACT_Registrados(filaCentro.K_Region, filaCentro.K_Region, filaCentro.K_SuperIntendencia);
t_Indicador(Indice).Planeados:= ACT_Planeados(filaCentro.K_Region, filaCentro.K_Centro, filaCentro.K_SuperIntendencia);
t_Indicador(Indice).Seguimiento:= ACT_Seguimiento(filaCentro.K_Region, filaCentro.K_Centro, filaCentro.K_SuperIntendencia);
t_Indicador(Indice).Cerrados:= ACT_Cerrados(filaCentro.K_Region, filaCentro.K_Centro, filaCentro.K_SuperIntendencia);
Indice:= Indice + 1;

END LOOP;

tab_Indicador:= t_Indicador;

END IF;

END ACT_Indicadores;

 
O sea la tabla no sirve de muicho por Ariel
Respuesta recibida el [06/03/2009 09:01:34]
o se amuchachos que si se crea una tabla de estas y no se puede hacer 
insert into mi_tabla
selec .....

no sirve de mucho ya que para ahcer un insercion secuencia a mano es un tremendo array. y la ide ad euna tabla es otra cosa. estoy sorprendido que sea tan mala esta solucion.

 
O sea la tabla no sirve de mucho por arielganc
Respuesta recibida el [06/03/2009 09:12:19]
o sea muchachos que si se crea una tabla de estas y no se puede hacer insert into mi_tablaselec .....no sirve de mucho ya que para hacer un insercion secuencial y a mano es un tremendo array. y la idea de una tabla es otra cosa. estoy sorprendido que sea tan mala esta solucion.

 
12 por 12
Respuesta recibida el [10/03/2009 05:52:05]
= 144

 
PL/SQL PARA DELETE por CAMILO SANABRIA
Respuesta recibida el [22/04/2009 11:12:28]
CORDIAL SALUDO.
NECESITO ME AYUDEN POR FAVOR, YA QUE TENGO QUE CRAE UN PL/SQL PARA REALIZAR UN DELETE DE UNA TABLA DE A 1000 REGISTROS, Y HAGA COMMIT, CADA VEZ QUE LO HAGA. EL DELETE QUE ESTOY INTENTANDO HACER ES :
DELETE FROM TABLA
WHERE CDCONTRA = '2647'

PERO RESULTA QUE EN LA TABLA, LOS REGISTROS QUE SON 2647, SUMAN 500.000 REGISTROS, Y A L REALIZAR ESTE DELETE DIRECTAMENTE, EL PROCESO SE ROMPE, POR ESO NECESITO CREAR ESTE PL.

MUCHAS GRACIAS POR LA AYUDA

 
Para Nelson G.A. por Fco Gomez
Respuesta recibida el [19/05/2009 09:36:52]
Muy buen ejemplo. Excelente aplicación de una tabla en PL.

 
Misma pregunta por Angly
Respuesta recibida el [10/06/2009 10:55:16]
Hola,
Requiero de la misma respuesta solicitada hace un tiempo, pero no veo resuesta.

La cito:

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.



Gracias!!!!

 
Carga de Datos por Carlos
Respuesta recibida el [01/07/2009 08:06:44]
hola, quisiera saber si es posible hacer una carga de datos de un archivo plano donde los datos vienen separados por coma sobre una tabla de PL para posterior insertarla en una tabla de la BD.}
Gracias!!
Muy buen trabajo

 
tablas dentro de pl/sql por Chus_m3
Respuesta recibida el [09/07/2009 04:14:30]
¿Como se puede introducir datos de una tabla  en otra  tabla (backup) que no existe dentro de un pl/sql? 

pensaba que con un select into se podia ya que creaba el solo la tabla peor no me funciona.
Este es el codigo

set SERVEROUTPUT ON
set TERMOUT OFF
SPOOL ${RUTA_TRABAJO}/backup_result.txt
BEGIN

select * INTO PARQUE_TME_SVA_$FECHANTE
FROM
PARQUE_TME_SVA;
DBMS_OUTPUT.PUT_LINE(sqlerr());
END
/
SPOOL off





 
TABLAS DENTRO DE PL/SQL por IO
Respuesta recibida el [10/11/2009 12:56:45]
PROBA CON LA SENTENCIA BULK COLLECT!!
LA TABLA PL/SQL DEBE SER DEL MISMO TIPO QUE LA OTRA.

 
respuesta a "Misma pregunta por Angly" por Victor Zapata
Respuesta recibida el [02/12/2009 12:01:17]
Yo estoy realizando algo similar, pero en mi caso es para php. Y parte de la respuesta es que si se pueden retornar tablas pl/sql, las cuales se "convierten" a arreglos php.

Si te interesa, en poco tiempo lo termino de organizar y lo publico aca mismo.

Aclaro es para php, pero imagino que en java debe existir un mecanismo similar

 
ROl de pagos por Daniel
Respuesta recibida el [08/12/2009 07:42:22]
Hola me podria ayudar para implementar un rol de pagos mensual basico en pl/sql oracle

 
FUNCIONES QUE DEVUELVEN TABLAS por ALVARO
Respuesta recibida el [31/12/2009 09:33:24]
ME GUSTARIA SABER SI puedo retornar una tabla pl/sql como resultado de una función y rescatarla con algún lenguaje de programación como Java??.

 
Tener cuidado con usar for en índices no ordenados por Jorge
Respuesta recibida el [31/01/2010 11:40:49]
Una de las tantas ventajas de las tablas PL es que no necesitamos poner en un orden estricto ascendente el índice, este puede saltearse números por ejemplo, el indice bién podría ser 1,3,5,6,9,21.
En este caso, la sentencia For es inutil y genera un error. Voy a tomar una parte del ejemplo del artículo:

DECLARE
TYPE ARR_CIUDADES IS TABLE OF VARCHAR2(50) INDEX BY BINARY_INTEGER;
misCiudades ARR_CIUDADES;
i BINARY_INTEGER;

BEGIN
misCiudades(1) := 'MADRID';
misCiudades(3) := 'BILBAO';
misCiudades(5) := 'MALAGA';
--| Obtenemos el primer valor
i := misCiudades.FIRST;
LOOP
dbms_output.put_line(misCiudades(i));
Exit When (i is null);
--| Recuperamos el siguiente
--| valor del índice sea
--| Consecutivo o no.
i := misCiudades.NEXT(i);
END LOOP;
END;

Con esta sintaxis la lectura de la table PL nunca falla, cuando llega al final de la misma i toma valor nulo y sale del bucle.


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: 84215 Fecha de publicación: 14/07/2006
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, 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: 111 | Comentarios: 3 | Archivo: Articulos
02/02/2010 iPad vs Telesketch
Visitas: 812 | Comentarios: 2 | Archivo: Articulos
Categorias: Humor
Visitas: 767 | Comentarios: 3 | Archivo: Articulos
Visitas: 3185 | Comentarios: 2 | Archivo: Articulos
Categorias: C#
Visitas: 14575 | Comentarios: 7 | Archivo: Articulos
Categorias: C#|Seguridad
Visitas: 1502 | Comentarios: 3 | Archivo: Articulos
Visitas: 697 | Comentarios: 2 | Archivo: Articulos
Visitas: 369 | Comentarios: 0 | Archivo: Articulos
Visitas: 2035 | Comentarios: 2 | Archivo: Articulos
Categorias: C#

Útimos temas recibidos en los foros ...
Solicitud certificado de afiliaciones a pensiones y cesantias proteccion por hz ... [Actualidad] 62 10/02/2010
certificado de pensiones del bbva horizonte por danger ... [Actualidad] 127 12/01/2010
certificacion cesantias porvenir por martha perez ... [Actualidad] 6 04/03/2010
cerificado fondo horizonte de pensiones y cesantias por carlos fideligno torres herrera ... [Actualidad] 148 18/01/2010
certificado de afiliacion por EDDY ... [Actualidad] 0 14/03/2010
Cursores por nopodes ... [ORACLE] 0 14/03/2010
peticion urgente mi nombre es juan pablo osorio cardona cc 71115218 por juancho ... [Actualidad] 0 14/03/2010
peticion por juancho ... [Actualidad] 0 14/03/2010
estrato de pencion por carlos antonio mateus gomez ... [Actualidad] 0 14/03/2010
quiero aprender c# por alcapego ... [C#] 4 16/02/2008
certificado pensiones horizonte por angela patricia rodriguez ... [Actualidad] 140 26/01/2010
certificado de penciones y cesantias por fredy ... [Actualidad] 2 29/01/2010

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 ...
22/10/2005 Insertar datos. INSERT    forma parte de...Tutorial SQL
11/10/2006 Métodos    forma parte de...Tutorial C#
13/10/2006 Constructores    forma parte de...Tutorial C#
25/08/2007 Variables en Transact SQL    forma parte de...Tutorial de Transact SQL
22/10/2005 Vistas    forma parte de...Tutorial SQL
14/07/2007 Como encriptar texto y variables usando algoritmos estandard como DES o TRIPLEDES
21/11/2007 Desencriptar Texto y variables con .NET VB y C# (segunda parte)
13/08/2007 Reiniciar un campo identity en SQL Server
01/06/2007 Autogenerado ESSALUD (Solución)
28/06/2006 Triggers en PL/SQL    forma parte de...Tutorial PL/SQL

 

Encuesta
¿A que perfil te adaptas mejor?




[Ver] [Votar]