![]() |
|
|
#1 |
|
Guest
Amigos
Mensajes: n/a
|
Estoy leyendo acerca de sql, pero como dice el título, no tengo bien en claro esos 2 términos. Haber si alguien me echa una mano. Busqué en google, pero no busca lo k yo kiero, peor es!!!
|
|
|
|
#2 |
|
Guest
Amigos
Mensajes: n/a
|
CURSORES EXPLÃCITOS vs CURSORES IMPLÃCITOS
Hasta el momento hemos utilizado cursores implÃcitos, sencillos y cómodos de usar, pero con un gran problema: no sirven cuando la consulta recupera más de una fila. Puesto que normalmente las consultas que nos interesen implicarán varias filas, deberemos utilizar cursores explÃcitos (definidos y controlados por el programador). Existen cuatro operaciones básicas para trabajar con uno de estos cursores: • Declaración: Se realiza en la zona de declaraciones del subprograma o bloque anónimo, utilizando la estructura CURSOR <nombrecursor> IS <sentencia SELECT>; • Apertura: En la zona de instrucciones (entre el BEGIN y el END), debe aparecer la instrucción OPEN <nombrecursor>;. Esto implica que se ejecute automáticamente la sentencia select sobre la que se ha definido el cursor y los resultados obtenidos se almacenan en estructuras internas de memoria manejadas por el cursor. • Recuperación de información: Para acceder a la información recuperada por el cursor y almacenarla en variables de nuestros programas, debemos utilizar la orden FETCH <nombrecursor> INTO {variable |registro |lista_variables};. Tenemos varias opciones: o bien creamos una variable para cada columna que se recupere en el cursor, o bien creamos una variable registro del mismo tipo que el cursor (<variable_registro> <nombrecursor>%ROWTYPE). • Cierre: Cuando acabamos de utilizar el cursor, debemos cerrarlo mediante CLOSE <nombrecursor>; Para conocer detalles respecto a la situación del cursor, existe cuatro atributos asociados a cada cursor que se pueden consultar: • %FOUND: Devuelve verdadero si el último FETCH ha recuperado alguna información y falso en caso contrario. Si el cursor no habÃa sido abierto previamente devuelve error, y si estaba abierto pero no se habÃa ejecutado ningún FETCH, devuelve NULL. Se suele utilizar como condición de continuación en bucles WHILE (WHILE cursor%FOUNDLOOP). • %NOTFOUND: Hace lo contrario que el atributo anterior. Se suele utilizar como condición de salida en bucles. • %ROWCOUNT: Devuelve el número de filas recuperadas hasta el momento por el cursor (número de FETCH realizados con éxito). • %ISOPEN: Devuelve verdadero si el cursor está abierto y falso en caso contrario. ATRIBUTOS EN CURSORES IMPLÃCITOS Oracle abre implÃcitamente un cursor cuando procesa un comando SQL no asociado a un cursor explÃcito. El cursor implÃcito siempre se llama SQL y dispone también de los cuatro atributos vistos para los cursores explÃcitos. Con los cursores implÃcitos podemos averiguar información útil sobre la ejecución de los comandos SELECT INTO, INSERT, UPDATE y DELETE. El valor de los atributos del cursor SQL se refiere, en cada momento, a la última orden DML ejecutada: • SQL%NOTFOUND será TRUE si el último INSERT, UPDATE, DELETE o SELECT INTO no ha afectado a ninguna fila. • SQL%FOUND será TRUE si el último INSERT, UPDATE, DELETE o SELECT INTO ha afectado a una o varias filas. • SQL%ROWCOUNT devuelve el número de filas afectadas por la última orden DML ejecutada. • SQL%ISOPEN será siempre FALSE, ya que ORACLE cierra automáticamente el cursor después de la ejecución de cada orden DML. Debemos tener en cuenta que en el caso de que se trate de una orden SELECT INTO, ésta debe obligatoriamente devolver una sola fila, o de lo contrario se producirÃa un error y se levantarÃa automáticamente una excepción (situación de error) del tipo NO_DATA_FOUND (si la consulta no recupera ninguna fila) o TOO_MANY_ROWS (si la consulta recupera más de una fila). |
|
![]() |
| Herramientas | |
| Desplegado | |
|
|

Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| [bat][g][f] (IF diferencia equ y == ) (SET /A Diferencia entre %v% y v) | 0x0309 | Batch | 5 | 05-may-2009 16:18 |
| Diferencia entre un CPU y un GPU | Black | Videos | 3 | 28-sep-2008 02:02 |
| Diferencia entre RAT y troyano? | alvaro4356 | HacK GeneraL | 4 | 21-dic-2007 23:17 |
| ¿Que diferencia hay entre...? | CraftyKox | Software | 4 | 23-mar-2004 21:46 |