Professional Documents
Culture Documents
Cursor
Se utiliza para manejar instrucciones sql plsql estos son segmentos de memoria existen 2 tipos
de cursores: implicitos y explicitos.
Cursores Implicitos
ejemplo
DECLARE
lsalario EMPLEADOS.SALARIO%type;
lid EMPLEADOS.ID%type;
BEGIN
SELECT SALARIO, ID
FROM EMPLEADOS
WHERE NOMBRE ='JUAN
AND APELLIDO='RODRIGUEZ';
END
Cursores Explicitos
Se utilizan cuando una sentencia devuelve mas de un valor (se ejecuta varias veces). Debe ser
prevbiamente definido (muy parecido a una variable).
Ejemplo 1:
DECLARE
CURSOR CEMP is --// se define el cursos y luego de 'is' el contenido
SELECT salario, id
FROM empleados;
C1_REC CEMP%type; --// de define una variable de tipo cursor
BEGIN
FOR C1_REC IN CEMP --// se recorre el cursor
LOPP
DEMS_OUT.PUT_LINE (C1.REC.id || ' ' || C1_REC.salario);
END LOOP;
END;
DECLARE
CURSOR CEMP (PNOMBRE in VARCHAR2) is
SELECT salario, id
FROM empleado;
C1_REC CEMP%type;
VNOMBRE VARCHAR(20);
BEGIN
VNOMBRE::='juan';
DBMS.OUT.PUT_LINE('Sueldo de empleados con nopmbre: '|| VNOMBRE);
for C1.REC in CEMP(VNOMBRE) --// Busca
todas los registros que coinciden para el criterio ya asignado arriba (juan)
LOOP
DBMS.OUT.PUT_LINE(C1_REC.id || ' ' || C1.REC.salario);
END LOOP;
END;
Instrucciones
Ejemplo:
DECLARE
CURSOR CEMP (PNOMBRE in VARCHAR) is
SELECT salario, id
FROM empleados
WHERE nombre = PNOMBRE;
C1_REC CEMP%type;
VNOMBRE VARCHAR(20);
BEGIN
VNOMBRE:='juan';
DBMS.OUT.PUT_LINE ('Sueldo de empleados por nombre: ' || VNOMBRE);
OPEN CEMP(VNOMBRE)
LOOP
FETCH CEMP into C1_REC;
DBMS.OUT.PUT_LINE(C1_REC.id || ' ' || C1_REC.salario);
EXIT WHEN CEMP%notfound;
END LOOP
DBMS.OUT.PUT_LINE('Numero de Empleados: ' || ' ' || CEMP%rowcount);
CLOSE CEMP;
END;
%isopen: Devuelve true si el cursor esta abierto.
%found: Devuelve true si el registro fue procesado.
%notfound: Devuelve true si el registro no fue procesado.
%rowcount: Devuelve el numero de registros procesados.
Investigar: solo leer control y manejo de excepciones para proximo miercoles 23 3 2011
export ORACLE_HOME=“/usr/lib/oracle/11.2/client”