2014-09-19 2 views
0

я создаю хранимую процедуру в оракуле, что выбирающая записи из входа в таблице -хранимых процедуры, относящиеся

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 близко, когда вы выдаете голую SELECT из PL/SQL.

: 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; 

выше код даст вам выход

Смежные вопросы