sql >> Databasteknik >  >> RDS >> Oracle

Oracle 11g - Kör PL/SQL-markörer

Det finns några problem:

  • Du behöver ett semikolon efter markördefinitionen (d.v.s. efter frågan).
  • Du kan inte använda bookCursor både som namn på markören och som namn på posten du hämtar. (Jag märker att en del av din kod använder bookCursorRec för det senare, så jag går med på det.)
  • fetch måste hämta in något, det vill säga till bookCursorRec .
  • Du behöver ett semikolon efter anropet till dbms_output.put_line .
  • Din fråga verkar fel; det ser ut som att båda kopplingarna är korsfogar.

Att sätta ihop det och justera formateringen och strukturen lite så att det blir lite mer "idiomatiskt" 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;
/

Förresten, Oracle-identifierare är mestadels skiftlägeskänsliga (i det att de implicit konverteras till versaler om du inte lindar in dem med dubbla citattecken), så vanligtvis använder folk identifierare som book_cursor_rec och date_destroyed snarare än bookCursorRec (=bookcursorrec ) och dateDestroyed (=datedestroyed ).



  1. MySQL VÄLJ VAR LIKA syntax

  2. Frågeprofilering 101 — Ja, det kan verkligen förbättra din SQL-serverprestanda

  3. Använd php/MySql medan loop i javascript-objekt

  4. Postgres VÄLJ där WHERE är UUID eller sträng