sql >> Base de Datos >  >> RDS >> Oracle

Cursor For Loop cómo imprimir el mensaje cuando no se encuentra

Puede hacer esto al tener una variable que solo se establece dentro del ciclo. Luego, puede verificar esa variable después de que se haya completado el ciclo para ver si se configuró y decidir si necesita hacer trabajo adicional.

Algo como:

DECLARE
  course_name    VARCHAR2(40) := '&course_input';
  v_rows_present BOOLEAN := FALSE;
BEGIN
  FOR course_rec IN (SELECT a.description,
                            a.cost,
                            a.prerequisite,
                            b.cost AS preq_cost
                     FROM   course a
                     LEFT   JOIN course b
                     ON     a.prerequisite = b.course_no
                     WHERE  upper(a.description) LIKE '%' || course_name || '%')
  LOOP
    v_rows_present := TRUE;

    IF course_rec.prerequisite IS NULL
    THEN
      dbms_output.put_line('There is NO prerequisite course for any that starts on ' || course_name || '. Try again');
    ELSE
      dbms_output.put_line('Course: ' || course_rec.course_description);
      dbms_output.put_line('Cost: ' || course_rec.cost);
      dbms_output.put_line('Prerequisite: ' || course_rec.prerequisite);
      dbms_output.put_line('Prerequisite Cost: ' || course_rec.prerequisite_cost);
      dbms_output.put_line('=================================================');

    END IF;
  END LOOP;

  IF NOT v_rows_present
  THEN
    dbms_output.put_line('There is NO VALID course that starts on ' || course_name || '. Try again.');
  END IF;

END;
/

nótese bien Actualicé su código porque parece que no entendió bien cómo usar un cursor for loop.

  • Cursor-for-loops crea su propia variable de registro implícitamente, por lo que no necesita declarar una usted mismo.
  • Tampoco necesita declarar un cursor explícitamente, eso se puede hacer como parte de la instrucción cursor-for-loop.
  • No es necesario que complete un nuevo registro con los mismos valores del registro de cursor por ciclo para usar los valores (siempre y cuando los use dentro del cursor por ciclo, por supuesto) !)