【问题标题】:Stored Procedure Related存储过程相关
【发布时间】:2014-11-13 19:47:05
【问题描述】:

我正在 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 子句

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

【问题讨论】:

    标签: oracle stored-procedures procedure


    【解决方案1】:

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

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

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

      上面的代码会给你输出

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-27
        • 1970-01-01
        • 2017-09-01
        • 1970-01-01
        • 2014-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多