PLSQL Básico - Cursores Explicitos (Explicit Cursors)
Vložit
- čas přidán 27. 04. 2012
- Explicación de los cursors explicitos. Un cursor explicito guarda el resultado de la ejecucion de un select, el registro o los registros serán accesados para poder trabajar sobre ellos, yo recomiendo el uso del FOR LOOP ya que este automaticamente nos crea el registro y no necesitamos abrir ni cerrar el cursor. Otra forma de hacerlo es por medio del FETCH.
- Věda a technologie
Muy claro y bien explicado. Gracias por compartir tu tiempo con los que no sabemos.
Muy buen tutorial!!!
Excelente, recomendado
Gracias, me sirvió durante mis estudios y ahora en el trabajo, de nuevo muchas gracias por compartir tu conocimiento
Explicas de maravilla, muchas gracias!
buen vídeo todo muy bien explicado.
Exelente forma de explicar los cursores y el for.
Me encantó la explicación, muchas gracias
Sin palabras bro, excelente video!
Gracias por el video muy claro y me sirvió mucho apenas empiezo en PL SQL
Excelente video, recién comienzo con PL/SQL!
Un saludo!
EXCELENTE EXPLICACIÓN. ME AYUDASTE MUCHO. GRACIAS :)
Ok excelente me quedo muy claro ahora, gracias amigo por la explicación. Saludos y muchos exitos. Bendiciones.
Muchas gracias Daniel, me sirvio de mucho tu respuesta. Yo lo habia hecho haciendo una tabla temporal, en la cual le ingrese los valores de la columna DN_ID y luego hice con un NOT IN la comparación para que me diera como resultado los valores que no estan en la columna DN_ID de la directoy_number. pero me pidieron hacerlo sin una tabla temporal y tu respuesta esta excelente. Se te agradece un monton tu ayuda.
Saludos amigo.
Re genial el video amigo, recomendado
Excelente, nada más que decir, Saludos de Chile
Excelente tus videos muchas gracias por compartir ;)
de antemano muchas gracias. Muy buenos videos
Muy bien exlicado :), saludos desde Xonacatique
Muy bien Explicado, Gracias!
Todo tiene más sentido D: Gracias!!
excelente muchas gracias
excelente , me has salvado
MUY BUENO LOS TUTORIALES:::::::SALUDOS DESDE PERU .,.,
Muy buena explicacion
fue de mucha ayuda bro
Excelente video :)
Video Super Bueno!
Excelente Video!!!
gracias macho!! gracias ati alomejor apruebo mañana xD ni mi profesor lo explica como tu
muy buen aporte!!
gracias... buen tuto
muchas gracias me sirvio :)
Excelente Video,,
Muy buen video gracias ahora entiendo mucho mejor los cursores y sus maravillosas posibilidades, aunque ya sea para bien o mal, el nivel de dificultad en mi instituto es mucho mayor y al final igual me destruyen xD
me salio amigo copie el for para el update pero borre la impresion de ese for copiado ,para q solo imprimiera ya actualizado ,gracias m ayudas bastante , mi admiracion y respeto .
Gracias :D
Hola Daniel. Gracias por el video tutorial. Yo estoy usando Postgresql. Este lenguale PL/SQL es un lenguaje standard por lo que me imagino que me servirá para usarlo dentro del postgresql. Sigues activo aclarando las dudas?
Gracias
solamente 10 registros, para limitar usamos un filtro adicional en tu cursor que seria AND rownum
Don Daniel, primero que todo quisiera felicitarlo por su magnifico trabajo, muy bien explicado... además, se nota que hay una preocupación por entregar un producto de calidad.
_Quisiera preguntarle si en sus próximos vídeos explicará "Triggers", seria magnifico poder tener uno de ellos ya que la mayoría, o tienen problemas de audio o simplemente el ingles Indú es complicado captarlo (sin ofender... claro).
Que tal Lu cy , si estas usando Oracle SQL developer para programar, el mensaje "bloque anonimo terminado" aparece en una ventana, pero la salida al dbms la activas en otra , para verla te vas al menu "ver" luego click donde dice "Salida DBMS" ahi aparecerà una pantalla, tiene un signo de +, lo activas para permitir la salida, haz una prueba con un codigo como:
begin
dbms_output.put_line('salida');
end;
Si eso ya està entocnes quizà el query del cursor no regresa, correlo con tu dato, saludos
hola buenas noches ,una consulta yo hice el ejercicio del cursor mandandole un parametro.pero no me muestra los resultados sino me dice bloque anonimo terminado.
Perdon Yamil por la tardanza, mira en el video "Oracle PLSQL Basico Parte 1 - DML (insert, select, update, delete) en la parte de descripcion viene el link para las tablas, tambien hay otro video para que puedas hacer tus practicas online. cualquier duda quedo al pendiente. gracias
Que tal Maximo, espero entiendas mi logica, usè una forma simple
create or replace procedure my_procedure as
--
v_count number;
v_max number;
v_num number := 0;
begin
select max(dn_id) into v_max from directory_number;
--
for v_count in 1..v_max loop
begin
select dn_id
into v_num
from directory_number
where dn_id = v_count;
exception when no_data_found then
dbms_output.put_line(v_count);
end;
end loop;
end my_procedure;
Hola Daniel, queria saber si me ayudabas con este problema, Suponiendo la tabla Directory_number cuya llave primaria es la columna DN_ID. Necesito que implementes un procedimiento PL/SQL que imprima los valores de DN_IDs faltantes en dicha tabla. Los valores encontrados deberan ser impresos a traves del comando dbms_output.put_line().
ej.supongamos que en la tabla existiera 2 lineas. Una linea con valor id 1 en la siguiente tiene 3. En este caso la linea 2 no existe, entonces tiene q imprimir 2
Hola Daniel! muy bueno el video! queria consultarte si el "FOR UPDATE nowait" lo que hace es dar prioridad a ese proceso frente a otros que se estan ejecutando al mismo tiempo. por otro lado queria consultarte si esta misma sentencia sirve para los store procedure de SQL Server.
Gracias!
Hola Cecilia, el "FOR UPDATE nowait" no da prioridad al proceso como tal, primeramete valida que el rango de registros que se esta consultando no tenga bloqueos y en caso de que asi sea termina el proceso en error. Esto porque cuando no es usado si alguna de las filas esta bloqueada por algun proceso o usuario los programas pueden quedar como ejecutandose cuando en realidad estan esperando que se se libere el recurso. Se puede agregar un rango de tiemop al final que se maneja en segundos (FOR UPDATE nowait 15). Si el recurso esta disponible si reserva los datos para ser actualizados. en SQL server pude ver algo como BEGIN TRAN
SELECT ID, Col1
FROM First WITH(NOWAIT)
WHERE ID = 1
Como puedo cerrar un cursor explicito por medio de un if ??
Como hago para dirigirme a un registro especifico del cursor, por ejemplo solo quiere imprimir el registro #2?
ojala subas videos d plsql avanzado o ya lo isistes informame porfavor gracias
Hola, muy bueno el video!
Una consulta, yo tengo que hacer algo muy parecido, pero en el for interno tengo que mostrar 10 registros de cada una. No todo. Como puedo hacer eso?
Quiero mostrar de una tabla de id de localidades, de cada localidad solo 10 clientes:
BEGIN
FOR R_LOCALIDADES IN C_LOCALIDADES LOOP
FOR R_GEOGRA IN C_GEOGRA (R_LOCALIDADES.CONTRATO) LOOP
DBMS_OUTPUT.PUT_LINE(R_GEOGRA.GEOGRAP_LOCATION_ID||'*'|| R_GEOGRA.DESCRIPTION);
END LOOP;
END LOOP;
END;
a si claro que si m,, mira si te fijas tenemos un ciclo, saque primero el numero maximo que tenemos de ids ,, despues el ciclo va de 1 hasta ese numero,, dentro de ese ciclo metemos un begin para que controle cuando no encuentre dato, recordando que V_COUNT es el que iria contando de 1 hasta el maxico ,, entraria a ese query ,, supongamos que V_COUNT = 5 pero cuando hace la comparacion DN_ID = 5 no existe entonces se iria a excepciones e imprimiria ese numero. Me dices si no queda claro
Que editor usas para hacer las pruebas?
Hola Ruth, Oracle da oportunidad de tener un espacio de trabajo gratis.. solo registrarte apex.oracle.com/en/learn/getting-started/ saludos
Podrias hacer un remake de los videos, pero usando el esquema hr.
Muy bueno, tenés algun tutorial con Fetch?? justo eso me piden :(
Hola Ireth, de FETCH no puse,, tienes el ejemplo de lo que te piden? igual con eso podemos validar.. Fetch al final del query para regresar cierta cantidad de columnas o FETCH para cuando tenemos un query dinamico y queremos ir a traves de las lineas del cursor. Saludos.
Solo me gustaria que me dieras una breve explicación de esta parte, siento que me perdi aca.
BEGIN
SELECT DN_ID INTO V_NUM FROM DIRECTORY_NUMBER
WHERE DN_ID = V_COUNT
De antemano muchas gracias.
Saludos cordiales.
HOLA NO ENTENDÍ POR QUE NO ES RECOMENDABLE USAR EN FETCH Y COMO SE USARÍA? SALUDOS
Hola Felisa, no es recomendable porque lo de agregar la instruccion del fetch tienes que abrir y cerrar el cursor en momentos especificos. Esto ya lo hace automaticamente el FOR-LOOP/. La cuestion es porque deberias usar FETCH? saludos, DN
Es que apenas comienzo en esto de PL/SQL y me confundo aun. ¿Que es exactamente el FECTH?
para que te sirver for en base de datos eso no lo entendi muy bien
José Alberto Clavijo Zambrana es la manera como recorres el cursor. Entre alguna otra aplicacion que podria tener.
7:07 Como enviar un parámetro a un cursor.
Mario Rogelio Solamente lo declaras ejemplo cursor c_1(p1 varchar2) is select ... y cuando lo usas le mandas el parametro necesario.
Daniel Nieto Muchas gracias Daniel, no era pregunta, solo era para marcar que allí empieza la explicación.
Pero muchas gracias, ahora sé que aún contesta.
Hola buen dia Daniel nieto esta interesante tu video me gustaria hacer los ejercicios ,podrias proporcionarme la el script de las tablas que necesito por favor .. yamildelgado@hotmail.com