当前位置: 代码迷 >> Oracle管理 >> 求大神帮忙Oracle新手如何把游标和存储过程结合简单的输出多行记录
  详细解决方案

求大神帮忙Oracle新手如何把游标和存储过程结合简单的输出多行记录

热度:198   发布时间:2016-04-24 04:04:03.0
求大神帮忙Oracle新手怎么把游标和存储过程结合简单的输出多行记录
存储过程
create or replace procedure pro_yy(spon1 in number,spon2 in number,spname out varchar2)is
begin
select NAME into spname from Users where ID between spon1 and spon2;
dbms_output.put_line(spname);
end;
过程创建成功但执行时提示行数超过返回行,
怎么用游标简单的改下,
顺便写一下
执行语句,
谢谢帮忙!!!

------解决思路----------------------
1、过程:
create or replace procedure pro_yy(spon1 in number,spon2 in number,spname out varchar2)is
cursor l_cursor is
  select  spname from Users where ID between spon1 and spon2;
begin
   for v_cur in l_cursor loop
        dbms_output.put_line(v_cur.spname);
   end loop;
end;

2、执行:
SQL>set serverout on
SQL>exec pro_yy('','','','')   --参数根据实际写
------解决思路----------------------
用隐式游标方便(不需要声明游标变量了):

create or replace procedure pro_yy(spon1 in number,spon2 in number,spname out varchar2)is
 begin
   for v_cur in (select  spname from Users where ID between spon1 and spon2) loop
        dbms_output.put_line(v_cur.spname);
   end loop;
end;

------解决思路----------------------
select NAME into spname from Users where ID between spon1 and spon2;查询出来的是一个集合,必须插入到一个集合变量里面。
create or replace procedure pro_yy(spon1 in number,spon2 in number)
is
   type str_table_type is table of varchar2(255);
   str_table str_table_type;
begin
   select NAME bulk collect into str_table from Users where ID between spon1 and spon2;
  
   for i in str_table.first .. str_table.last loop
        dbms_output.put_line(str_table(i));
   end loop;
end;
------解决思路----------------------
你可以自定义一个type,如CREATE OR REPLACE TYPE YSTYPE_ARRAY AS VARRAY(20000)  of varchar(100);
然后把type作为输出,以便在业务中使用
------解决思路----------------------
你说的应该应该是管道函数罢?具体例子在网上搜PIPE ROW或PIPELINED 


引用:
oracle存储过程和游标结合不是能输出多行吗?在学习中,谢谢,希望用游标和存储过程解决
  相关解决方案