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

|
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
|
Visitas:
812
|
Comentarios:
2
|
Archivo:
Articulos
|
Visitas:
767
|
Comentarios:
3
|
Archivo:
Articulos
|
Visitas:
674
|
Comentarios:
2
|
Archivo:
Articulos
|
Visitas:
3185
|
Comentarios:
2
|
Archivo:
Articulos
|
Visitas:
14575
|
Comentarios:
7
|
Archivo:
Articulos
|
Visitas:
1502
|
Comentarios:
3
|
Archivo:
Articulos
|
|
Visitas:
697
|
Comentarios:
2
|
Archivo:
Articulos
|
|
Visitas:
369
|
Comentarios:
0
|
Archivo:
Articulos
|
Visitas:
2035
|
Comentarios:
2
|
Archivo:
Articulos
|
|
|
 |
|
 |