我在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子句
这是什么意思?我不明白这一点。
答案 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
操纵的有趣讨论。