Oracle
 sql >> Database >  >> RDS >> Oracle

Cursore For Loop come stampare il messaggio quando non viene trovato

Puoi farlo avendo una variabile che viene impostata solo all'interno del ciclo. Quindi puoi controllare quella variabile dopo che il ciclo è stato completato per vedere se è stata impostata e decidere se è necessario fare del lavoro aggiuntivo.

Qualcosa come:

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;
/

NB Ho aggiornato il tuo codice poiché sembra che tu abbia capito male come utilizzare un cursore per il ciclo.

  • I cursori per i cicli creano implicitamente la propria variabile di record, quindi non è necessario dichiararne una tu stesso.
  • Inoltre, non è necessario dichiarare un cursore in modo esplicito - ciò può essere fatto come parte dell'istruzione cursor-for-loop.
  • Non è necessario popolare un nuovo record con gli stessi valori del record del cursore per il ciclo per utilizzare i valori (a patto che li utilizzi all'interno del cursore per il ciclo, ovviamente !)