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

Afiliados
La Web del programador
MundoProgramacion


 

Cursores en PL/SQL

Introducción a cursores PL/SQL

   PL/SQL utiliza cursores para gestionar las instrucciones SELECT. Un cursor es un conjunto de registros devuelto por una instrucción SQL. Técnicamente los cursores son fragmentos de memoria que reservados para procesar los resultados de una consulta SELECT.  

   Podemos distinguir dos tipos de cursores:

  • Cursores implicitos. Este tipo de cursores se utiliza para operaciones SELECT INTO. Se usan cuando la consulta devuelve un único registro.
  • Cursores explicitos. Son los cursores que son declarados y controlados por el programador. Se utilizan cuando la consulta devuelve un conjunto de registros. Ocasionalmente también se utilizan en consultas que devuelven un único registro por razones de eficiencia. Son más rápidos.

   Un cursor se define como cualquier otra variable de PL/SQL y debe nombrarse de acuerdo a los mismos convenios que cualquier otra variable. Los cursores implicitos no necesitan declaración.

   El siguiente ejemplo declara un cursor explicito:


declare

cursor c_paises is
SELECT
CO_PAIS, DESCRIPCION
FROM PAISES;
begin
/* Sentencias del bloque ...*/
end;

   Para procesar instrucciones SELECT que devuelvan más de una fila, son necesarios cursores explicitos combinados con un estructura de bloque.

   Un cursor admite el uso de parámetros. Los parámetros deben declararse junto con el cursor.

   El siguiente ejemplo muestra la declaracion de un cursor con un parámetro, identificado por p_continente.


declare

cursor c_paises (p_continente IN VARCHAR2) is
SELECT
CO_PAIS, DESCRIPCION
FROM PAISES

WHERE CONTINENTE = p_continente;
begin
/* Sentencias del bloque ...*/
end;

   El siguiente diagrama representa como se procesa una instrucción SQL a través de un cursor.

 

Fases para procesar una instrucción SQL

 
  

Inicio | Tutorial PL/SQL Bloques PL/SQLTutorial PL/SQLCursores Implicitos en PL/SQL Versión para imprimir Foros de consulta

 
vaya currada eh! por yo
Respuesta recibida el [12/06/2007 08:08:45]
podrias currate un poco mas los ejemplos macho!!1 que no veas vaya mierda ejemplos has puestos

 
El tutorial se divide actualme... por Devjoker
Respuesta recibida el [12/06/2007 11:57:00]
El tutorial se divide actualmente en 30 capitulos, este como se puede leer en el titulo es introducción a los cursores en PL/SQL.

En la parte izquierda de la página, dispones del menú del tutorial con enlaces directos a cada capitulo, y en la parte superior e inferior de la pantalla botones que te permiten navegar a través del tutorial.

Son muy fáciles de usar, ya veras como enseguida aprendes a usarlos.

 
eres un genio por gabyta
Respuesta recibida el [05/07/2007 05:04:00]
eres muy simpatico amigo pedro herrarte

 
No entiendo por Jhonny
Respuesta recibida el [01/09/2007 12:15:08]
Hombre!!!, tenés que ser más claro. Da un ejemplo de cursor que no se entiende.

 
Pues si no entiendes estos eje... por Luis
Respuesta recibida el [02/09/2007 08:43:02]
Pues si no entiendes estos ejemplos mejor que te plantees dedicarte a otra cosa porque la informática no es lo tuyo

 
Cursor FOR por Juan Pablo
Respuesta recibida el [05/09/2007 04:40:14]
declare
CURSOR nombre IS /*CURSOR*/
select apellido,oficio,salario,comision from empleado;
begin
for fila IN nombre LOOP /*no es necesario definir esta variable*/
dbms_output.put_line(fila.apellido||' '||fila.oficio||' '||fila.salario||' '||fila.comision);
END LOOP;
end;
/

 
Estoy de Acuerdo contigo Luis por Albert
Respuesta recibida el [09/11/2007 11:15:14]
Creo que la explicación que estan dando en la pagina esta 100 % apto para que lo entienda cualquier programador, entonces Jhonny creo que esto no es lo tuyo dedicate a otra cosa jeje

 
Incultos por Luis
Respuesta recibida el [29/11/2007 07:54:13]
Jhonny y yo vaya par de toca huevos, no tienen ni idea y encima piden las cosas de una manera poco decorosa. ESTUDIAR antes de criticar

 
Ejemplo por Roberto
Respuesta recibida el [30/11/2007 12:34:59]
CREATE OR REPLACE Procedure UpdateCourse
( name_in IN varchar2 )
IS
cnumber number;

cursor c1 is
select course_number
from courses_tbl
where course_name = name_in;

BEGIN

open c1;
fetch c1 into cnumber;

if c1%notfound then
cnumber := 9999;
end if;

insert into student_courses
( course_name,
course_number)
values ( name_in,
cnumber );

commit;

close c1;

EXCEPTION
WHEN OTHERS THEN
raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);
END;

obtenido en http://www.techonthenet.com/oracle/procedures.php

 
Otro Ejemplo por Xavier
Respuesta recibida el [08/01/2008 12:23:22]
-- se arma un cursor que levanta los registros que sean más viejos que un año
-- y luego se recorre ese cursor para copiar los registros a una tabla historica.
-- algo simple para ver el uso de cursores con declaracion implicita.

CURSOR cab_cur IS
SELECT c_tipo_doc, n_remito_sc, f_remito
FROM t_envios
WHERE f_remito < ( trunc ( add_months ( sysdate , -12 ), 'month'))
ORDER BY f_remito;

FOR cab_rec IN cab_cur LOOP
-- declaración implicita del registro que recorre el cursor
-- de esta forma no hace falta open, fetch y close del cursor

BEGIN

INSERT INTO hco_envios
SELECT *
FROM t_envios
WHERE cab_rec.c_tipo_doc = c_tipo_doc
AND cab_rec.n_remito_sc = n_remito_sc;

EXCEPTION
WHEN OTHERS THEN
raise_application_error(-20001,'CODIGO ERROR: '||SQLCODE||' MENSAJE: '||SQLERRM);

END;

END LOOP; -- fin del recorrido del cursor

 
A la verga por Miguel Guerrero
Respuesta recibida el [23/01/2008 10:22:29]
Para Luis y Albert vayanse al carajo!!,, la neta que los ejemplos nos muy buenos.

 
Ejemplos por oracle girl
Respuesta recibida el [11/02/2008 03:02:58]
no veo cuál es el problema, estos ejemplos son a prueba de tontos.

 
Ejemplos por oracle boy xD
Respuesta recibida el [20/03/2008 02:33:55]
Si les ponen un ejemplo mas elaborado se van a empezar a quejar de que esta muy complejo ... -_-!

 
me parto el culo por David
Respuesta recibida el [09/04/2008 02:08:00]
jajajajaja como me he reido con el primer comentario de esta pagina...dios mio jajajaja lo siento por el autor que por cierto ha explicado muy bien lo que son los cursores, y como se declaran.
jajajajajajaja en serio que risa me ha entrado, yo estaba ahi leyendo para enterarme y plas! el comentario de "yo" juas me parto. Por cierto el tio no deberia tener ni idea del tema. Gracias por la informacion!

 
ERROR AL EJECUTAR SELECT por ROBERTO
Respuesta recibida el [24/04/2008 12:27:55]
como puedo ignorar el error que se muestra cuando el SELECT no trae registros y se esta asignando a una variable:

select codigo into vCodigo from clientes;

 
Recorrer el cursor con el loop por Jorge Sanchez
Respuesta recibida el [13/05/2008 05:11:03]
Mi pregunta es la siguiente es como hago para recorrer el cursor con el "for" pero que no lo haga desde el first_record sino a partir del last_record y empiece a recorrerlo al reves

 
Duda de un cursor por Bea
Respuesta recibida el [27/05/2008 02:27:30]
Hola tengo la siguiente sentencia pero el cursor al leerlo no me recupera nada porque puede ser? Gracias.
*-----------------
DECLARAR-CURSOR.
*-----------------

EXEC SQL
DECLARE CURSOR_SALDOS CURSOR FOR
SELECT
A.CLAVEAC,
A.CODIGOISIN,
A.FECHAVALORLIQ,
TO_DATE (TO_CHAR(A.FECHAVALORLIQ),'YYYYMMDD'),
A.FECHADIA,
A.NUMEROTOTALPARTICIONES,
A.VALORLIQUIDATIVO,
A.SALDO,
A.SALDOMEDIOMES
FROM CI.SALDOSFONDOSPLANES_T A
WHERE
CODIGOISIN = 'ES0142233032' AND
* FECHAVALORLIQ BETWEEN 20080102 AND 20080430
FECHAVALORLIQ BETWEEN 20080102 AND 20080229
ORDER BY CLAVEAC, CODIGOISIN, FECHAVALORLIQ,
FECHADIA DESC

END-EXEC.

*-----------------------
ABRIR-CURSOR.
*-----------------------
DISPLAY 'ABRIR CURSOR_SALDOS'
MOVE 'N' TO SW-FIN-CURSOR

EXEC SQL
OPEN CURSOR_SALDOS
END-EXEC.
*
DISPLAY 'ABIERTO CURSOR_SALDOS'.
PERFORM CAMB-STAT-ORA.
*

IF DLNOT-DATA
SET FIN-CURSOR TO TRUE
END-IF.

DISPLAY 'FIN-CURSOR......' SW-FIN-CURSOR.

*------------
LEER-CURSOR.
*------------

DISPLAY 'ENTRO EN LEER-CURSOR'.

EXEC SQL
FETCH CURSOR_SALDOS
INTO :CLAVEAC-TAB,
:CODIGOISIN-TAB,
:FECHAVALORLIQ-TAB,
:FECHAVALOCONV,
:FECHADIA-TAB,
:NUMEROTOTALPARTICIONES-TAB,
:VALORLIQUIDATIVO-TAB,
:SALDO-TAB,
:SALDOMEDIOMES-TAB
END-EXEC.



PERFORM CAMB-STAT-ORA.

IF (SQLCODE = 1403 OR SQLCODE = -1403)
SET FIN-CURSOR TO TRUE
END-IF.

 
evaluacion por kfigueroa
Respuesta recibida el [09/06/2008 05:25:57]
Grande...muy bueno...me ha ayudado enormemente en dramas que tenias

 
como se ejecuta por rafa_el
Respuesta recibida el [01/08/2008 06:11:18]
que tal, soy primerizo, tengo instalado oracle y sqlplus, quiero "ejecutar" alguno de sus codigos (claro esta que con tablas propias) para ir aprendiendo, pero no se como ejecutarlos y si llevan una sintaxis antes de sus codigos,, gracias!!!


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

Título:


Para preguntar utiliza los foros.



Inicio | Tutorial PL/SQL Bloques PL/SQLTutorial PL/SQLCursores Implicitos en PL/SQL Versión para imprimir

Cursores en PL/SQL
Autor: Pedro Herrarte Sánchez
Visitas: 73223 Fecha de publicación: 23/05/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: 277 | 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 ...
03/10/2006 Fundamentos de C#    forma parte de...Tutorial C#
19/09/2006 Recuperar datos BLOB de ORACLE
04/07/2007 ¿Cómo crear RSS?    forma parte de...Tutorial RSS
04/07/2007 ¿Cómo se usa el RSS?    forma parte de...Tutorial RSS
03/04/2008 LINQ con métodos Extensores y expresiones lambda    forma parte de...Linq y Métodos extensores
14/05/2007 Fundamentos de Transact SQL    forma parte de...Tutorial de Transact SQL
01/01/2005 Conceptos básicos.    forma parte de...Iniciación a las bases de datos
01/01/2005 Introducción a las bases de datos    forma parte de...Iniciación a las bases de datos
01/01/2006 Borrado de datos. DELETE    forma parte de...Tutorial SQL
22/10/2005 Actualización de datos. UPDATE    forma parte de...Tutorial SQL

 

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