Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Cursor für Schleife, wie eine Nachricht gedruckt wird, wenn sie nicht gefunden wird

Sie können dies tun, indem Sie eine Variable haben, die nur innerhalb der Schleife gesetzt wird. Dann können Sie diese Variable überprüfen, nachdem die Schleife abgeschlossen ist, um zu sehen, ob sie gesetzt wurde, und entscheiden, ob Sie zusätzliche Arbeit leisten müssen.

Etwas wie:

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

Hinweis:Ich habe Ihren Code aktualisiert, da Sie offenbar falsch verstanden haben, wie ein Cursor für eine Schleife verwendet wird.

  • Cursor-for-loops erstellen implizit ihre eigene Datensatzvariable, sodass Sie nicht selbst eine deklarieren müssen.
  • Sie müssen auch keinen Cursor explizit deklarieren - das kann als Teil der Cursor-for-Loop-Anweisung erfolgen.
  • Sie müssen keinen neuen Datensatz mit den gleichen Werten aus dem Cursor-for-Loop-Datensatz füllen, um die Werte zu verwenden (solange Sie sie natürlich innerhalb des Cursor-for-Loop-Datensatzes verwenden !)