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

PLS-00221:'C1'(kursor) bukan prosedur atau tidak terdefinisi

Anda tampaknya memiliki kursor eksplisit yang membingungkan, mis.:

declare
  cursor cur is
  select dummy from dual;
begin
  for rec in cur
  loop
    dbms_output.put_line(rec.dummy);
  end loop;
end;
/

dengan kursor ref - yang merupakan penunjuk ke kursor terbuka.

Anda biasanya akan menggunakan kursor ref untuk membuka kursor di db dan meneruskannya kembali ke aplikasi pemanggil untuk mengulangnya.

Cara Anda mendeklarasikan kursor ref sebagai parameter keluar dan kemudian mencoba mengulanginya dalam prosedur yang sama tidak masuk akal - setelah Anda mengambil catatan dari kursor, Anda tidak dapat mengambilnya kembali.

Jika Anda benar-benar harus mengulang kursor ref, Anda akan menggunakan sintaks semacam ini:

declare
  cur sys_refcursor;
  rec dual%rowtype;
begin
  open cur for select dummy from dual;
  loop
    fetch cur into rec;
    exit when cur%notfound;
    dbms_output.put_line(rec.dummy);
  end loop;
end;
/

tetapi seperti yang saya katakan, secara umum, Anda tidak akan mengulang kursor ref di db, Anda akan melakukannya di kode panggilan.

Mungkin jika Anda memperbarui pertanyaan Anda dengan persyaratan yang ingin Anda penuhi, kami dapat menyarankan cara yang lebih baik untuk melakukannya.




  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 dbms_output.put() di-buffer berbeda dari dbms_output.put_line()?

  2. Melewati array asosiatif sebagai parameter antar paket

  3. Cara memetakan string ke urutan DB di Hibernate

  4. org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter ERROR

  5. Tidak dapat membuat batch insert ke Oracle DB menggunakan MyBatis