2014-09-19 49 views
0

我在Oracle中创建一个存储过程,是选择从登录表中的记录 -存储过程相关

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

每当我要编译该它显示了一个错误:

PLS-00428: an INTO clause is expected in this SELECT statement

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

回答

0

PLS-00428: an INTO clause is expected in this SELECT statement

这意味着你需要一个INTO接近,当你从PL/SQL发布裸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操作的有趣讨论。

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; 

上面的代码将会给你输出