Oracle存储过程:返回结果集和输出参数
Oracle存储过程具有OUT参数并返回结果集,例如Oracle存储过程:返回结果集和输出参数,oracle,stored-procedures,Oracle,Stored Procedures,Oracle存储过程具有OUT参数并返回结果集,例如 create or replace procedure foo(empId IN NUMBER, maxSalary OUT NUMBER) AS BEGIN select * from Employee e where e.id >=empId; select max(salary) into maxSalary from Employee; END; 错误: PLS-00428: an INTO clause is
create or replace procedure foo(empId IN NUMBER, maxSalary OUT NUMBER) AS BEGIN
select * from Employee e where e.id >=empId;
select max(salary) into maxSalary from Employee;
END;
错误:
PLS-00428: an INTO clause is expected in this SELECT statement
Mysql存储过程可以返回结果集和输出参数。如何为oracle db执行此操作?在oracle中,如果没有
INTO
子句,则无法运行直接select语句
如果您使用的是Oracle 12c及以上版本,则可以使用REF游标
和DBMS\u SQL。返回\u结果
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;
对于以前的版本(11g、10g),您可以将REF游标
作为OUT
参数传递,并通过运行脚本从sqlplus
或TOAD打印它
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;
在调用过程之前定义绑定变量
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.
告诉我,SQL Server 2008能否实现同样的目标?@WillMarcouiller,是的。Ms Sql允许您从存储过程返回一个或多个数据集。请避免使用游标,这对于Ms Sql来说很慢(例如,只返回表)。详情如下: