专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > Oracle管理

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

发布时间:2010-05-20 14:01:29 文章来源:www.iduyao.cn 采编人员:星星草
求大神帮忙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存储过程和游标结合不是能输出多行吗?在学习中,谢谢,希望用游标和存储过程解决
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: