Hola a todos, hoy os voy a explicar como funcionan los cursores en PL/SQL.
Hasta ahora, si necesitamos recoger varios registramos de una consulta, con lo que sabemos ahora, no tenemos manera de guardar esos datos.
Esto lo podemos hacer con los cursores, estos se declaran como si fueran variables.
Se declaran así:
CURSOR cursor_name IS SELECT_statement;
La idea del cursor es que almacena todas las filas que devuelva el select y cuando lo recorramos, ira devolviendo una a una cada de las filas que las iremos tratando.
Tenemos varias formas de recorrer nuestro cursor.
Tendremos que hacer lo siguiente para recoger los datos:
- Abrir el cursor.
- Recojo una fila.
- Indico si sigue habiendo datos en el cursor, en el caso de no haya datos, sale del bucle.
- Hago lo que tenga que hacer.
- Cuando termine del bucle, cierro el cursor.
Lo podemos hacer con un loop:
declare v_clientes clientes%rowtype; cursor clientes_cursor is select * from clientes c; begin open clientes_cursor; loop fetch clientes_cursor into v_clientes; exit when clientes_cursor%notfound; dbms_output.put_line(v_clientes.nombrecliente); end loop; close clientes_cursor; end; /
Para saber si un cursor tiene o no mas datos, usaremos: clientes_cursor%notfound;
Devolverá true si no tiene nada.
Para recoger la siguiente fila a tratar, lo haremos con fetch, cuando no haya mas filas, no recogerá nada.
Para abrir un cursor, lo hacemos con open.
Para cerrar un cursor, lo hacemos con close.
O lo podemos hacer con un for:
declare cursor clientes_cursor is select nombrecliente from clientes c; begin for registro in clientes_cursor loop dbms_output.put_line(registro.nombrecliente); end loop; end; /
Con los for, hacemos todo lo que debemos hacer en un menos lineas, cuando salimos del for, el cursor se cierra solo.
Os dejo un un par de vídeos donde tratamos el tema:
Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.
Deja una respuesta