很抱歉问这个问题,但这是因为之前给出的答案都不足以让我理解。我想编写一个返回表中所有列的存储过程。作为临时查询,我只需编写
SELECT * FROM EMPLOYEES
但是在这里,我收到一个错误,提示我提供 INTO
子句,我不明白为什么以及如何做。有人可以解释一下在上述情况下以及当我只想返回一列值(多行)。
最佳答案
具有 SQL Server 背景的人习惯于编写返回整个查询结果的存储过程,因此尝试编写如下所示的 PL/SQL 过程:
procedure get_emps is
begin
-- this will NOT work!
select * from emp;
end;
不幸的是事情没那么简单。 PL/SQL 中最接近的等价物可能是返回引用游标的函数:
function get_emps return sys_refcursor is
rc sys_refcursor;
begin
open rc for
select * from emp;
return rc;
end;
您可以从调用程序中调用它,如下所示:
declare
cur sys_refcursor;
emp_rec emp%rowtype;
begin
cur := get_emps;
loop
fetch cur into emp_rec;
exit when cur%notfound;
end loop;
close cur;
end;
或者在 SQL Plus 中你可以这样做:
var rc refcursor
:rc := get_emps;
print rc
关于Oracle 过程中的 Select 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6029802/