¿Tengo que abrir el cursor para poder usar los atributos de cursor% FOUND o% NOTFOUND para un cursor implícito?

¿Es posible ejecutar c_emp%notfound después del siguiente bucle FOR o tengo que abrir el cursor primero?

declare
 cursor c_emp is select * from employee;
 begin
    for c_rec in c_emp
    loop
        dbms_output.put_line(r_emp.first_Name);
    end loop;
 end;
 /

Quiero ejecutar una declaración, una sola declaración UPDATE después del bucle FOR, pero solo si el bucle FOR procesó alguna de las filas del cursor. Sé que puedo colocar una bandera, pero ¿hay una forma más limpia?

preguntado el 08 de noviembre de 11 a las 18:11

2 Respuestas

"¿Es posible ejecutar c_emp% notfound después del siguiente bucle FOR?"

No, eso va a lanzar ORA-01001: invalid cursor. Los atributos del cursor solo tienen alcance mientras el cursor está abierto, que en esta sintaxis se encuentra entre los FOR y END LOOP.

Este es un aspecto desagradable de PL / SQL, pero me temo que está atascado con un recuento.

respondido 08 nov., 11:22

Por qué no solo:

declare
 cursor c_emp is select * from employee;

 begin

    for c_rec in c_emp
    loop
       dbms_output.put_line(r_emp.first_Name);
    end loop;

    UPDATE some_table
       SET some_values
     WHERE some_conditions
       AND EXISTS (SELECT * FROM employee WHERE r.id IS NOT NULL)
 end;
 /

Supongo que aquí la tabla de su empleado tiene una clave principal llamada ID, que puede ajustar según sea necesario.

respondido 08 nov., 11:22

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.