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


 

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

 
cuidado con to_date(to_char(... por Horacio Miranda
Respuesta recibida el [09/09/2008 03:58:25]
Debes tener cuidado unico con estas transformaciones, para pocos datos no te daras cuenta que estas haciendo full scan, pero cuando tengas 100 Millones de registros creeme que se notara :D

 
En realidad para que sirven? por Elliot
Respuesta recibida el [16/09/2008 04:11:22]
Se lo basico para hacer un cursor. 

DECLARE CURSOR CUR1 IS
SELECT CAMPO1, CAMPO2 FROM TABLA1;

V_CAMP1 NUMBER;
V_CAMP2 VARCHAR2(14);
BEGIN
OPEN CUR1;
LOOP
FETCH CUR1 INTO V_CAMP1, V_CAMP2;
EXIT WHEN CUR1%NOTFOUND
DBMS_OUTPUT.PUT_LINE(V_CAMP1 ||' '||V_CAMP2);
END LOOP;
CLOSE CUR1;
END;

AHORA LO DIFICIL:
desde SQL lo llamo asi
SQL>@nombre_archivo

me aparecen desplegados los valores de cada campo por registro.

es lo mismo si hiciera

SQL>SELECT campo1, campo2 from tabla1;

quisiera saber si hay forma de llamar a CUR1 desde SQL> sin necesidad de llamar al programa (claro que debo llamar el programa por lo menos una vez para declarar el cursor, creo que es logico )

Que utilidad tienen los cursores?

 
COMO DEFINO CURSORES EN SQL SERVER por ESOJ
Respuesta recibida el [18/09/2008 05:21:44]
Hola buenas tardes les envio un coordial saludo a todos yo conozco muy bien los cursores de Oracle pero apenas me estoy metiendo a SQL Server 2005 y soy franco no se como definir un cursor y recorrerlo 

y una duda supuestamente en comentarios que he leido y he escuchado se dice que los cursores no son muy bueno que perjudican el performance de la base de datos yo francamente los utilizo por que me ayudan en casos complejos como es poder manipular una coleccines de Datos y no creo mucho en el famoso mito de el performance



 
resolver este ejercicio en oracle por julie andrea torres
Respuesta recibida el [01/11/2008 12:40:31]
Hola buenas tardes necesito saber como puedo resolver este ejercicio(codigo en oracle creacion tablas cursores y demas para llegar a la solucion de la pregunta): de la tabla clientes para aquellos con sede en bogota,teniendo en cuenta la direccion deben clasificarse los clientes en 5 zonas,comprendidas por el norte apartir de la calle 100,por el sur a partir de la av.1 de mayo, por el occidente a partir de la avenida boyaca,por el oriente a partir de la av.caracas y la zona central los que estan al interior de los limites enunciados.enumere los tres vendedores con los mayores recaudos por zona. Por favor si alguin me puede ayudar que lo necesito urgente gracias.....

 
pues no ha ido tan mal por pues no ha ido tan mal
Respuesta recibida el [01/12/2008 06:13:57]
Pues entre lo que discute uno y el otro al final me ha solucionado bastantes cosas. Muchas gracias y seguid en la brecha!!

 
Cómo puedo?? por xxx
Respuesta recibida el [18/12/2008 11:01:53]
Como puedo tener relaciones sexuales con Pamela Anderson?? La verdad no quiero que ella se enamore de mi, solo quiero hacerle el sexo unas 6 veces y botarla, que le digo??? selet my_pito into your_cosa from tus_tetas_operadas where en_el_yate_de_tommy.... o le digo que nos vayamos a un motel?? ayudenme!!!


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: 93671 Fecha de publicación: 23/05/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: 47 | Comentarios: 0 | Archivo: Articulos
Visitas: 109 | Comentarios: 0 | Archivo: Articulos
Visitas: 158 | Comentarios: 0 | Archivo: Articulos
Categorias: ASP.NET
Visitas: 34 | Comentarios: 0 | Archivo: Articulos
Categorias: TFS
Visitas: 285 | Comentarios: 1 | Archivo: Articulos
Categorias: Visual Basic .NET|C#
Visitas: 844 | Comentarios: 2 | Archivo: Articulos
Categorias: C#|ASP.NET|HTML DHTML|XML|JavaScript|ASP.NET|ASP|PHP|Visual Studio
Visitas: 712 | Comentarios: 1 | Archivo: Articulos
Categorias: Administración|Tutorial SQL
Visitas: 452 | Comentarios: 0 | Archivo: Articulos
Categorias: ASP.NET
Visitas: 1055 | Comentarios: 1 | Archivo: Articulos
Categorias: ASP.NET|CSS|ASP.NET
Visitas: 251 | Comentarios: 0 | Archivo: Articulos
Categorias: TFS

Útimos temas recibidos en los foros ...
autogenerado de sugero social de salud por noemi ... [Visual Basic .NET] 15 29/06/2008
FORMULARIO ACCESS por jcifuentes ... [Access] 11 29/05/2007
Ysmael por Ysmael ... [SQL] 0 08/01/2009
Reflection por Maurito22 ... [C#] 2 06/01/2009
Programador por Robert ... [ORACLE] 0 07/01/2009
como insertar registros en un formulario de visual basic.net desde la base de datos sql server por orlan ... [SQL Server] 8 09/06/2008
quierocodigo de autogenerado del seguro por edwin garcia ramirez ... [Visual Basic .NET] 0 07/01/2009
Video gratis sobre AJAX con ASP.NET por alexxe ... [ASP.NET] 1 06/01/2009
calcular saldo acumulativo por cben ... [SQL] 5 30/12/2008
comparar 2 campos de 2 tablas usando el like por nani ... [SQL Server] 1 06/01/2009
Apagar ordenador remoto en C# por victoryiyo ... [C#] 1 07/01/2009
numero de AUTOGENERADO IPSS por carlos ... [Visual Basic .NET] 5 30/10/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 ...
24/05/2006 Cursores Implicitos en PL/SQL    forma parte de...Tutorial PL/SQL
03/10/2006 Miembros de tipo    forma parte de...Tutorial C#
24/05/2006 Cursores Explicitos en PL/SQL    forma parte de...Tutorial PL/SQL
22/10/2005 Insertar datos. INSERT    forma parte de...Tutorial SQL
01/06/2006 Cursores de actualización en PL/SQL    forma parte de...Tutorial PL/SQL
28/06/2006 Excepciones en PL/SQL    forma parte de...Tutorial PL/SQL
17/10/2006 Excepciones personalizadas en PL/SQL    forma parte de...Tutorial PL/SQL
01/08/2007 Actualizar datos en Transact SQL    forma parte de...Tutorial de Transact SQL
28/06/2006 Propagacion de excepciones en PL/SQL    forma parte de...Tutorial PL/SQL
10/07/2006 Subprogramas en PL/SQL    forma parte de...Tutorial PL/SQL

 

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