存储过程相关

时间:2014-09-19 08:58:52

标签: oracle stored-procedures procedure

我在oracle中创建一个存储过程,从登录表中选择记录 -

create or replace procedure login_info
    (username IN varchar2, password IN varchar2, result OUT number)
as
begin
    select * from login;
end;

每当我要编译它时,它都显示错误:

  

PLS-00428:此SELECT语句中需要一个INTO子句

这是什么意思?我不明白这一点。

2 个答案:

答案 0 :(得分:2)

您必须将SELECT语句的结果存储到变量中,您可以使用sys_refcursor来显示结果。

create or replace procedure login_info
    (username IN varchar2, password IN varchar2, result OUT number, result_out OUT SYS_REFCURSOR)
as
l_query varchar2(1000) := Null;

begin
  l_query :=  'select * from login';
open result_out 
for l_query;
end;

上面的代码会给你输出

答案 1 :(得分:0)

  

PLS-00428:此SELECT语句中需要一个INTO子句

这意味着当您从PL / SQL发出裸INTO时需要SELECT关闭。

:d


更具建设性:您认为您的选择结果会在哪个代码片段中?

create or replace procedure login_info
    (username IN varchar2, password IN varchar2, result OUT number)
as
begin
    select * from login;
end;

您必须以某种方式检索它才能由PL / SQL代码处理。假设您要收集多行,则应使用BULK COLLECT INTO

create or replace procedure login_info
    (username IN varchar2, password IN varchar2, result OUT number)
as
    type my_tbl_type IS TABLE OF login%ROWTYPE;
    my_tbl my_tbl_type;
begin
    select * BULK COLLECT INTO my_tbl from login;

    -- do whatever you
    -- need here
    -- on `my_tbl`.
end;

作为最后一点,您可能正在寻找明确的CURSOR吗?你应该明确地看一下PL/SQL 101: Working with Cursors。这是关于SELECT ... INTO ...CURSOR操纵的有趣讨论。