sql >> Database >  >> RDS >> Oracle

Oracle 11g - PL/SQL-cursors uitvoeren

Er zijn een paar problemen:

  • Je hebt een puntkomma nodig na de cursordefinitie (d.w.z. na de zoekopdracht).
  • U kunt bookCursor niet gebruiken zowel als de naam van de cursor en als de naam van het record dat u ophaalt. (Ik merk dat een deel van je code gebruikmaakt van bookCursorRec voor het laatste, dus daar ga ik mee akkoord.)
  • Het fetch moet in . ophalen iets, dat wil zeggen, in bookCursorRec .
  • Je hebt een puntkomma nodig na de aanroep van dbms_output.put_line .
  • Uw zoekopdracht lijkt verkeerd; het lijkt erop dat beide joins cross-joins zijn.

Het in elkaar zetten en de opmaak en structuur een beetje aanpassen zodat het iets "idiomatischer" is 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;
/

Trouwens, Oracle-ID's zijn meestal hoofdlettergevoelig (in die zin dat ze impliciet worden omgezet in hoofdletters, tenzij je ze tussen dubbele aanhalingstekens plaatst), dus meestal gebruiken mensen ID's zoals book_cursor_rec en date_destroyed in plaats van bookCursorRec (=bookcursorrec ) en dateDestroyed (=datedestroyed ).



  1. Mysql-updatequery met voorbereide instructie geeft fout

  2. ORA-28040:Geen overeenkomende uitzondering voor authenticatieprotocol

  3. Verschillende documenttypes opslaan

  4. Mysql-toegang geweigerd wegens gebruikersfout?