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

Thủ tục lưu trữ Oracle:trả về cả tham số đặt và ra kết quả

Trong Oracle, bạn không thể chạy các câu lệnh chọn trực tiếp mà không có INTO mệnh đề.

Nếu bạn đang sử dụng Oracle 12c trở lên, bạn có thể sử dụng REF CURSORDBMS_SQL.RETURN_RESULT

create or replace procedure foo(empId IN NUMBER, maxSalary OUT NUMBER) AS
q SYS_REFCURSOR;
 BEGIN
    OPEN q FOR select * from Employee e where e.id >=empId;
     DBMS_SQL.return_result (q); -- This will display the result
    select max(salary) into maxSalary from Employee;
END;

Đối với các phiên bản trước (11g, 10g), Bạn có thể vượt qua REF CURSOR dưới dạng OUT và in nó từ sqlplus hoặc TOAD bằng cách chạy dưới dạng tập lệnh.

create or replace procedure foo(empId IN NUMBER, maxSalary OUT NUMBER,
   q OUT SYS_REFCURSOR) AS

     BEGIN
        OPEN q FOR select * from Employee e where e.id >=empId;
        select max(salary) into maxSalary from Employee;
    END;

Xác định các biến liên kết trước khi gọi thủ tục.

VARIABLE v_empID NUMBER
VARIABLE v_maxsalary NUMBER
VARIABLE v_q REFCURSOR

EXEC :v_empID := 101
EXEC foo(:v_empID,:v_maxsalary,:v_q ) 
PRINT v_q -- This will display the result from the query.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. RDLC LocalReport Xuất sang Excel thực sự chậm

  2. Thứ tự đánh giá mệnh đề Oracle SQL

  3. Làm thế nào để viết một truy vấn tương tự như GROUP_CONCAT của MySQL trong Oracle?

  4. Truy vấn LISTAGG ORA-00937:không phải là một hàm nhóm đơn

  5. Các câu hỏi hàng đầu về JAVA / JRE trong Ứng dụng Oracle