Oracle 过程中的 Select 语句

发布于 2024-11-07 09:48:10 字数 225 浏览 0 评论 0原文

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

SELECT * FROM EMPLOYEES

但在这里,我收到一个错误,提示我提供 INTO 子句,但我没有提供理解为什么以及如何。有人可以解释一下在上述情况下以及当我只想返回一列值(多行)时我将如何执行此操作。

sorry for asking this question but it's because none of the answers given before are enough for me to understand. I want to write a stored procedure that returns all the columns in a table.As an ad hod query I just write

SELECT * FROM EMPLOYEES

but here, I get an error which prompts me to provide INTO clause which I don't understand why and how.Could someone explain how would I do that both in the above case and when I want to return just one column values(multiple rows).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

且行且努力 2024-11-14 09:48:10

具有 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

People with a SQL Server background are used to writing stored procedures that return whole query results and so try to write PL/SQL procedures something like this:

procedure get_emps is
begin
    -- this will NOT work!
    select * from emp;
end;

Unfortunately it's not that simple. Probably the nearest equivalent in PL/SQL is a function returning a ref cursor:

function get_emps return sys_refcursor is
    rc sys_refcursor;
begin
    open rc for
        select * from emp;
    return rc;
end;

You could call this from a calling program like this:

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;

or in SQL Plus you could do:

var rc refcursor
:rc := get_emps;
print rc
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文