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 CURSOR
và DBMS_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.