Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

PLS-00221:'C1' (con trỏ) không phải là một thủ tục hoặc không được xác định

Dường như bạn nhầm lẫn với các con trỏ rõ ràng, ví dụ:

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

với một con trỏ tham chiếu - là một con trỏ tới một con trỏ đang mở.

Thông thường, bạn sẽ sử dụng con trỏ tham chiếu để mở một con trỏ trong db và chuyển nó trở lại ứng dụng gọi điện để nó lặp qua.

Cách bạn đã khai báo các con trỏ tham chiếu là tham số ngoài và sau đó cố gắng lặp lại chúng theo cùng một quy trình không có ý nghĩa gì - khi bạn đã tìm nạp một bản ghi từ con trỏ, bạn không thể tìm nạp lại nó.

Nếu bạn hoàn toàn phải lặp qua con trỏ tham chiếu, bạn sẽ sử dụng loại cú pháp sau:

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;
/

nhưng như tôi đã nói, nói chung, bạn sẽ không lặp lại các con trỏ tham chiếu trong db, bạn sẽ làm điều đó trong mã gọi điện.

Có lẽ nếu bạn cập nhật câu hỏi của mình với các yêu cầu mà bạn đang cố gắng đáp ứng, chúng tôi có thể đề xuất một cách tốt hơn để thực hiện điều đó.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách sử dụng các biến trong mệnh đề where trong Oracle PL / SQL

  2. JBoss tự động kết nối lại với cơ sở dữ liệu khi cơ sở dữ liệu được khởi động lại / ngắt kết nối

  3. Tự động gia tăng trong oracle vào bảng đã được tạo

  4. Làm cách nào để xử lý dấu ngoặc kép 'trong SQL

  5. Đầu ra ODP.NET Tham số chuỗi không trả về giá trị