问题 在Oracle的过程中选择Statement


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

SELECT * FROM EMPLOYEES

但在这里,我收到一个错误,提示我提供 INTO 我不明白为什么以及怎么做的子句。有人可以解释在上面的例子和我想要只返回一个列值(多行)时如何做到这一点。


13108
2018-05-17 10:55


起源

请显示您尝试过的代码,确切的错误,并阅读pl / sql文档。 - Mat


答案:


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

15
2018-05-17 11:13



谢谢Tony.I得到了一切。 - Mikayil Abdullayev
亲爱的,托尼,如果你能告诉我它是怎么做的,我会投票并接受你的回答 - Mikayil Abdullayev
怎么做的?对不起,我接受了“谢谢Tony.I得到了一切”,这意味着你完全明白我的回答。你不明白什么? - Tony Andrews
啊对!好吧,在我的答案的左上角有一个“向上箭头”三角形。我认为附近有一个刻度图标可以接受答案。 - Tony Andrews
谢谢!欢迎使用Stack Overflow。 - Tony Andrews