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

Oracle 11g — uruchamianie kursorów PL/SQL

Jest kilka problemów:

  • Potrzebujesz średnika po definicji kursora (tj. po zapytaniu).
  • Nie możesz użyć bookCursor zarówno jako nazwa kursora, jak i nazwa pobieranego rekordu. (Zauważyłem, że część twojego kodu używa bookCursorRec dla tego drugiego, więc pójdę z tym.)
  • fetch musi pobrać do coś, to znaczy do bookCursorRec .
  • Potrzebujesz średnika po wywołaniu dbms_output.put_line .
  • Twoje zapytanie wydaje się błędne; wygląda na to, że oba sprzężenia są sprzężeniami krzyżowymi.

Łącząc to w całość i dostosowując nieco formatowanie i strukturę, aby było trochę bardziej "idiomatyczne" PL/SQL:

DECLARE
    CURSOR bookcursor IS
    SELECT btname, isbn, pubname, datedestroyed
      FROM booktitle bt
      JOIN publisher p
        ON bt.pid = p.id -- this is just a guess
      JOIN bookcopy bc
        ON bt.bcid = bc.id -- this is just a guess
     WHERE datedestroyed IS NULL
    ;
    bookcursorrec bookcursor%ROWTYPE;
BEGIN
    OPEN bookcursor;
    LOOP
        FETCH bookcursor INTO bookcursorrec;
        EXIT WHEN bookcursor%NOTFOUND;
        dbms_output.put_line( 'ISBN: ' ||bookcursorrec.isbn
                              || ' - Book Name: ' || bookcursorrec.btname
                              || ' - Publisher: ' || bookcursorrec.pubname );
    END LOOP;
    CLOSE bookcursor;
END;
/

Nawiasem mówiąc, identyfikatory Oracle są w większości rozróżniane wielkości liter (ponieważ są niejawnie konwertowane na wielkie litery, chyba że umieścisz je w podwójnych cudzysłowach), więc zwykle ludzie będą używać identyfikatorów takich jak book_cursor_rec i date_destroyed zamiast bookCursorRec (=bookcursorrec ) i dateDestroyed (=datedestroyed ).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-00060:wykryto zakleszczenie podczas oczekiwania na zasób

  2. Dostęp do połączonych elementów

  3. Oracle CLOB nie może wstawić więcej niż 4000 znaków?

  4. Hibernate Jpa — wyjątek naruszenia ograniczeń w kluczu podstawowym (sekwencja)

  5. ORA-12560:TNS:błąd adaptera protokołu