度量快速开发平台-专业、快速的软件定制快开平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 部件 流程 SQL
查看: 197|回复: 7

[分享] Oracle存储过程中游标的简单使用

[复制链接]

542

主题

5919

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
发表于 2018-2-15 16:13:22 | 显示全部楼层 |阅读模式
存储过程中查询语句如何返回多行结果?
我们知道,如果存储过程中查询语句有多行结果输出,会报错:ORA-01422: exact fetch returns more than requested number of rows
若想让存储过程中的查询语句返回多行结果不报错,则需要使用游标来实现。
1.打开输出选项

  1. SET SERVEROUTPUT ON;
复制代码
2.创建查询员工薪水的存储过程
  1. create or replace procedure proc_salary is

  2.   --定义变量
  3.   v_empno emp.empno%TYPE;
  4.   v_ename emp.ename%TYPE;
  5.   v_sal emp.sal%TYPE;
  6.   
  7.   --定义游标
  8.   CURSOR emp_cursor IS
  9.   SELECT empno, ename, sal from emp;
  10.   
  11. BEGIN

  12. --循环开始
  13. LOOP

  14.   IF NOT emp_cursor%ISOPEN  THEN
  15.      OPEN emp_cursor;
  16.   END IF;
  17.   
  18.   FETCH emp_cursor INTO  v_empno, v_ename, v_sal;
  19.   --退出循环的条件
  20.   EXIT WHEN emp_cursor%NOTFOUND OR emp_cursor%NOTFOUND IS NULL;

  21.   dbms_output.put_line('员工编号为' || v_empno || '的' || v_ename || '薪水为:' || v_sal);
  22.    
  23. END LOOP;

  24. END;
  25. /
复制代码
3.执行存储过程
exec proc_salary;
  1. SQL> exec proc_salary;
  2. 员工编号为7369的SMITH薪水为:800
  3. 员工编号为7499的ALLEN薪水为:1600
  4. 员工编号为7521的WARD薪水为:1250
  5. 员工编号为7566的JONES薪水为:2975
  6. 员工编号为7654的MARTIN薪水为:1250
  7. 员工编号为7698的BLAKE薪水为:2850
  8. 员工编号为7782的CLARK薪水为:2450
  9. 员工编号为7788的SCOTT薪水为:3000
  10. 员工编号为7839的KING薪水为:5000
  11. 员工编号为7844的TURNER薪水为:1500
  12. 员工编号为7876的ADAMS薪水为:1100
  13. 员工编号为7900的JAMES薪水为:950
  14. 员工编号为7902的FORD薪水为:3000
  15. 员工编号为7934的MILLER薪水为:1300

  16. PL/SQL procedure successfully completed.

  17. Elapsed: 00:00:00.00
复制代码





回复

使用道具 举报

542

主题

5919

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
 楼主| 发表于 2018-2-15 16:13:46 | 显示全部楼层
回复 支持 反对

使用道具 举报

542

主题

5919

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
 楼主| 发表于 2018-2-15 16:21:35 | 显示全部楼层
回复 支持 反对

使用道具 举报

231

主题

2541

帖子

5807

积分

论坛元老

Rank: 8Rank: 8

积分
5807
发表于 2018-2-15 17:16:15 | 显示全部楼层
回复 支持 反对

使用道具 举报

231

主题

2541

帖子

5807

积分

论坛元老

Rank: 8Rank: 8

积分
5807
发表于 2018-2-15 17:17:01 | 显示全部楼层
回复 支持 反对

使用道具 举报

231

主题

2541

帖子

5807

积分

论坛元老

Rank: 8Rank: 8

积分
5807
发表于 2018-2-16 17:56:57 | 显示全部楼层
回复 支持 反对

使用道具 举报

231

主题

2541

帖子

5807

积分

论坛元老

Rank: 8Rank: 8

积分
5807
发表于 2018-2-16 17:57:24 | 显示全部楼层
回复 支持 反对

使用道具 举报

542

主题

5919

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
 楼主| 发表于 2018-2-22 13:43:52 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|重庆度量科技  本站关键词:快速开发平台

GMT+8, 2018-12-12 14:21 , Processed in 0.421800 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表