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

QIUXI123 2015-09-14 05:07:52
存储过程
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;
过程创建成功但执行时提示行数超过返回行,
怎么用游标简单的改下,
顺便写一下
执行语句,
谢谢帮忙!!!
...全文
372 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
QIUXI123 2015-09-15
  • 打赏
  • 举报
回复
引用 1 楼 kingwinerxp 的回复:
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('','','','') --参数根据实际写
我的spname是个输出参数,表里的字段名是NAME,我是想查NAME在ID1-9之间的; exec pro_yy('1','9');提示错误
kingwinerxp 2015-09-15
  • 打赏
  • 举报
回复
你说的应该应该是管道函数罢?具体例子在网上搜PIPE ROW或PIPELINED
引用 6 楼 QIUXI123 的回复:
oracle存储过程和游标结合不是能输出多行吗?在学习中,谢谢,希望用游标和存储过程解决
QIUXI123 2015-09-15
  • 打赏
  • 举报
回复
oracle存储过程和游标结合不是能输出多行吗?在学习中,谢谢,希望用游标和存储过程解决
jdsnhan 2015-09-15
  • 打赏
  • 举报
回复
你可以自定义一个type,如CREATE OR REPLACE TYPE YSTYPE_ARRAY AS VARRAY(20000) of varchar(100); 然后把type作为输出,以便在业务中使用
wangchangming 2015-09-15
  • 打赏
  • 举报
回复
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;
QIUXI123 2015-09-15
  • 打赏
  • 举报
回复
过程创建成功了,非常感谢, 但是我的spname 是一个输出参数, 我是想查表里的NAME传给spname, 然后输出, exec pro_yy('1','9')或exec pro_yy('1','9','NAME') 都不对啊,求解,谢谢
mayanzs 2015-09-15
  • 打赏
  • 举报
回复
用隐式游标方便(不需要声明游标变量了): 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;
kingwinerxp 2015-09-14
  • 打赏
  • 举报
回复
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('','','','') --参数根据实际写

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧