Cursores en PL/SQL

Páginas: 7 (1564 palabras) Publicado: 7 de mayo de 2014
PROGRAMACIÓN BASE DE DATOS
(PBD)
Objetivo: El Alumno deberá trabajar con cursores Explícitos e implícitos
Cursores en PL/SQL
Introducción a cursores PL/SQL
El conjunto de filas que devuelve una consulta, puede ser 0, 1 o N, dependiendo de a cuantas filas afecte la condición de búsqueda. Cuando una consulta devuelve múltiples filas, se debe declarar un cursor para procesarlas. Se puededeclarar un cursor en la parte de declaraciones de cualquier bloque, subprograma o package PL/SQL.
Se utilizan tres instrucciones para controlar un cursor: OPEN, FETCH, y CLOSE. En primer lugar, se inicializa el cursor con la sentencia OPEN, la cual identifica al conjunto resultante. Entonces, se usa la sentencia FETCH para recuperar la primera fila; se puede ejecutar FETCH de manera repetida hastaque todas las filas han sido tratadas, cuando se procesa la última, se debe cerrar el cursor con la sentencia CLOSE. Se pueden procesar varias consultas de forma paralela, declarando y abriendo múltiples cursores.
Podemos distinguir dos tipos de cursores:
Cursores implícitos. Este tipo de cursores se utiliza para operaciones SELECT INTO. Se usan cuando la consulta devuelve un único registro.Cursores explícitos. 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 quecualquier otra variable. Los cursores implícitos no necesitan declaración.
El siguiente ejemplo declara un cursor explicito:
CREATE OR REPLACE function prf_cursor_simple(nro_reg in number) return varchar
is
cursor c_personas is
SELECT rut, nombre
FROM persona
order by rut;

rut VARCHAR2(3);
nombre VARCHAR2(50);
begin
OPEN c_personas;
for i in 1..nro_reg loopFETCH c_personas INTO rut,nombre;
if c_personas%NOTFOUND then
return 'No Hay Mas Registros';
end if;
end loop;
CLOSE c_personas;
return nombre;
end;

Para procesar instrucciones SELECT que devuelvan más de una fila, son necesarios cursores explícitos combinados con un estructura de bloque.
Un cursor admite el uso de parámetros. Los parámetros deben declararse juntocon el cursor.
El siguiente ejemplo muestra la declaración de un cursor con un parámetro, identificado por p_rut.
CREATE OR REPLACE function prf_cursor_simple_parametro(prut in number) return varchar
is
cursor c_personas (p_rut IN VARCHAR2)is
SELECT rut, nombre
FROM persona
where rut = p_rut
order by rut;
rut VARCHAR2(3);
nombre VARCHAR2(50);
begin
OPENc_personas (prut);
FETCH c_personas INTO rut,nombre;
if c_personas%NOTFOUND then
return 'No existe Rut';
end if;
CLOSE c_personas;

return nombre;
end;



Cursores Implícitos
Declaración de cursores implícitos.
Los cursores implícitos se utilizan para realizar consultas SELECT que devuelven un único registro.
Deben tenerse en cuenta los siguientes puntos cuando seutilizan cursores implícitos:
Con cada cursor implícito debe existir la palabra clave INTO.
Las variables que reciben los datos devueltos por el cursor tienen que contener el mismo tipo de dato que las columnas de la tabla.
Los cursores implícitos solo pueden devolver una única fila. En caso de que se devuelva más de una fila (o ninguna fila) se producirá una excepción (Error). No se preocupesi aún no sabe que es una excepción, le valdrá conocer que es el medio por el que PL/SQL gestiona los errores.
   El siguiente ejemplo muestra un cursor implícito:

CREATE OR REPLACE function prf_cursor_simple_implicito(prut in number) return varchar is
rut VARCHAR2(3);
nombre VARCHAR2(50);
begin
SELECT rut, nombre
INTO rut,nombre
FROM persona
where rut =...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Cursores Pl/Sql
  • pl / sql
  • Pl/Sql
  • PL sql
  • Pl/Sql
  • pl/sql
  • Sql server cursores
  • Oracle pl/sql

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS