Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Cursor For Loop como imprimir mensagem quando não encontrado


Você pode fazer isso tendo uma variável que só é definida dentro do loop. Em seguida, você pode verificar essa variável após a conclusão do loop para ver se ela foi definida e decidir se precisa fazer trabalho 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.B. Atualizei seu código, pois você parece ter entendido mal como usar um cursor para loop.
  • Cursor-for-loops criam sua própria variável de registro implicitamente, para que você não precise declarar uma.
  • Você também não precisa declarar um cursor explicitamente - isso pode ser feito como parte da instrução cursor-for-loop.
  • Você não precisa preencher um novo registro com os mesmos valores do registro cursor-for-loop para usar os valores (desde que você os esteja usando dentro do cursor-for-loop, é claro !)