Oracle 过程中的 Select 语句

标签 select stored-procedures oracle10g

很抱歉问这个问题,但这是因为之前给出的答案都不足以让我理解。我想编写一个返回表中所有列的存储过程。作为临时查询,我只需编写

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/

相关文章:

Selenium WebDriver - 隐藏选择和 anchor

mysql - 在 MySql 存储过程中使用 IF 和 Concat 时卡住

stored-procedures - 有没有办法并行执行雪花中的存储过程

stored-procedures - Oracle-返回新插入的键值

java - 如何使用scriptlet提高从oracle 10g到jsp页面的数据传输速度

mysql - MySQL查询-选择两个表的两列之间的差异

linq - 我可以在 LINQ select 子句中声明函数吗?

mysql - 如何在mySql中多次执行select语句?

mysql - 如何处理mysql中存储过程中的异常?

mysql - 处理整个数据库以获取数据