Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Oracle 11g - Menjalankan Kursor PL/SQL

Ada beberapa masalah:

  • Anda memerlukan titik koma setelah definisi kursor (yaitu, setelah kueri).
  • Anda tidak dapat menggunakan bookCursor baik sebagai nama kursor dan sebagai nama catatan yang Anda ambil. (Saya perhatikan bahwa sedikit kode Anda menggunakan bookCursorRec untuk yang terakhir, jadi saya akan melakukannya.)
  • fetch perlu mengambil ke sesuatu, yaitu, ke dalam bookCursorRec .
  • Anda memerlukan titik koma setelah panggilan ke dbms_output.put_line .
  • Kueri Anda sepertinya salah; sepertinya kedua gabungan adalah gabungan silang.

Menyatukannya, dan menyesuaikan pemformatan dan struktur sedikit sehingga sedikit lebih "idiomatik" 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;
/

Omong-omong, pengidentifikasi Oracle sebagian besar peka huruf besar-kecil (karena secara implisit dikonversi menjadi huruf besar kecuali Anda membungkusnya dengan tanda kutip ganda), jadi biasanya orang akan menggunakan pengidentifikasi seperti book_cursor_rec dan date_destroyed daripada bookCursorRec (=bookcursorrec ) dan 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. Apakah SQLFiddle rusak? Kesalahan untuk Oracle, SQL Server, ...?

  2. Menggunakan kata kunci DISTINCT menyebabkan kesalahan ini:bukan ekspresi SELECTed

  3. Jalankan beberapa pernyataan SQL di java

  4. Pivot dinamis di Oracle sql

  5. Oracle menganggap string kosong sebagai NULL sementara SQL Server tidak - bagaimana cara terbaik menangani ini?