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

hiển thị tập kết quả từ quy trình được lưu trữ oracle 10g

Có lỗi nào bạn gặp khi thực hiện thủ tục này hoặc chạy nó trong SQLPLUS không? Bạn có thể đăng phiên sqlplus của mình như hiện tại không?

PRINT là một lệnh cụ thể của sqlplus và nó không thể được gọi bên trong khối thủ tục. Nếu bạn cần in kết quả của một con trỏ trỏ chuột bên trong một thủ tục, thì bạn sẽ cần tìm nạp từ nó và in từng bản ghi ở định dạng mà bạn cần.

SQL> create or replace procedure test_REFCURSOR (
  2     i_number in number,
  3     o_cursor out sys_refcursor) 
  4  as
  5  begin
  6     open o_cursor for
  7        'select empno, ename from emp
  8             where rownum < ' || i_number ;
  9  end;
 10  /

Procedure created.

SQL> variable rc refcursor;
SQL> exec test_refcursor(5, :rc);

PL/SQL procedure successfully completed.

SQL> print rc;

     EMPNO ENAME
---------- ----------
      7369 SMITH
      7499 ALLEN
      7521 WARD
      7566 JONES

Bạn cũng nên thay đổi thủ tục của mình (hoặc) lệnh gọi thủ tục để có các tên biến khác nhau.generallt, tôi đặt tiền tố cho tất cả các biến đầu vào bằng "i_" và tất cả các biến đầu ra bằng "o_". Bằng cách này, khai báo thủ tục của bạn sẽ trông giống như ..

CREATE OR REPLACE PROCEDURE IFSINFO.SHORTAGE_SHEET (i_Site     IN VARCHAR2,
                                                    i_Buyer    IN VARCHAR2,
                                                    i_Supplier IN VARCHAR2,
                                                    o_Cursor   OUT SYS_REFCURSOR) AS ....

và lệnh gọi thủ tục sẽ là ..

IFSINFO.SHORTAGE_SHEET(    i_site     => vsite,
                           i_buyer    => vbuyer,
                           i_supplier => vsupplier,
                           o_cursor   => vcursor);

Bạn không cần sử dụng ":" ngay từ đầu cho các biến này vì chúng không phải là biến môi trường máy chủ (đây là trường hợp cho lần thực thi thứ hai của bạn bằng cách sử dụng SQLPLUS trong đó bạn sử dụng biến sqlplus "rc" bên trong lệnh gọi thủ tục)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. không phải là một chức năng nhóm nhóm đơn với MAX được chọn

  2. Sự khác biệt giữa SQL Server và Oracle 'Người dùng'

  3. Oracle - Chuyển đổi các hàng thành cột

  4. Cách tốt nhất để đặt lại một chuỗi Oracle về giá trị tiếp theo trong một cột hiện có?

  5. thủ tục lưu trữ cuộc gọi oracle bên trong lựa chọn