Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle 11g - Изпълнение на PL/SQL курсори

Има няколко проблема:

  • Необходима ви е точка и запетая след дефиницията на курсора (т.е. след заявката).
  • Не можете да използвате bookCursor както като име на курсора, така и като име на записа, който извличате. (Забелязвам, че част от вашия код използва bookCursorRec за последното, така че ще се придържам към него.)
  • fetch трябва да извлече в нещо, тоест в bookCursorRec .
  • Трябва ви точка и запетая след извикването на dbms_output.put_line .
  • Вашата заявка изглежда грешна; изглежда, че и двете съединения са кръстосани съединения.

Сглобяване и малко коригиране на форматирането и структурата, така че да е малко по-"идиоматичен" 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;
/

Между другото, идентификаторите на Oracle са предимно чувствителни към малки и главни букви (в смисъл, че имплицитно се преобразуват в главни букви, освен ако не ги поставите в двойни кавички), така че обикновено хората ще използват идентификатори като book_cursor_rec и date_destroyed вместо bookCursorRec (=bookcursorrec ) и 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. Кога или защо да използвате SET DEFINE OFF в Oracle Database

  2. Предоставяне на създаване на произволен тригер срещу предоставяне на създаване на тригер

  3. PL/SQL:има ли инструкция за пълно спиране на изпълнението на скрипта?

  4. Защо имам ORA-00904 дори когато колоната е налице?

  5. ORA-00907 при опит за създаване на ограничение CHECK