Oracle
 sql >> Base de données >  >> RDS >> Oracle

Cursor For Loop comment imprimer un message lorsqu'il n'est pas trouvé

Vous pouvez le faire en ayant une variable qui n'est définie qu'à l'intérieur de la boucle. Ensuite, vous pouvez vérifier cette variable une fois la boucle terminée pour voir si elle a été définie et décider si vous devez effectuer un travail supplémentaire.

Quelque chose comme :

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. J'ai mis à jour votre code car vous semblez avoir mal compris comment utiliser un curseur pour la boucle.

  • Les boucles de curseur créent implicitement leur propre variable d'enregistrement, vous n'avez donc pas besoin d'en déclarer une vous-même.
  • Vous n'avez pas non plus besoin de déclarer explicitement un curseur ; cela peut être fait dans le cadre de l'instruction cursor-for-loop.
  • Vous n'avez pas besoin de remplir un nouvel enregistrement avec les mêmes valeurs à partir de l'enregistrement curseur-pour-boucle afin d'utiliser les valeurs (tant que vous les utilisez dans le curseur-pour-boucle, bien sûr !)