Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Cursor For Loop, jak wydrukować wiadomość, gdy nie została znaleziona

Możesz to zrobić, mając zmienną, która jest ustawiana tylko wewnątrz pętli. Następnie możesz sprawdzić tę zmienną po zakończeniu pętli, aby zobaczyć, czy została ustawiona, i zdecydować, czy musisz wykonać dodatkową pracę.

Coś takiego:

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

Uwaga Zaktualizowałem Twój kod, ponieważ wydaje się, że źle zrozumiałeś, jak używać kursora do pętli.

  • Cursor-for-loops tworzą własną zmienną rekordu niejawnie, więc nie musisz sam jej deklarować.
  • Nie musisz również jawnie deklarować kursora - można to zrobić jako część instrukcji kursor-do-pętli.
  • Nie musisz wypełniać nowego rekordu tymi samymi wartościami z rekordu kursora w pętli, aby użyć wartości (o ile oczywiście używasz ich w obrębie kursora w pętli !)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL ROWNUM jak zwrócić wiersze między określonym zakresem

  2. Użycie differ na jednej kolumnie i wykonanie kolejności według innej kolumny daje błąd

  3. Proste zapytanie Oracle:literał nie pasuje do ciągu formatu

  4. Jak mogę uzyskać liczbę rekordów, których dotyczy procedura składowana?

  5. Zresetuj sekwencję automatycznego przyrostu pl-sql