存储过程中查询语句如何返回多行结果?

我们知道,如果存储过程中查询语句有多行结果输出,会报错:ORA-01422: exact fetch returns more than requested number of rows

若想让存储过程中的查询语句返回多行结果不报错,则需要使用游标来实现。

本例主要也是用来熟悉存储过程中游标的简单使用方法。案例所涉及的数据表使用的是oracle自带的scott用户。

1.打开输出选项

SET SERVEROUTPUT ON;

2.创建查询员工薪水的存储过程

create or replace procedure proc_salary is 

  --定义变量
v_empno emp.empno%TYPE;
v_ename emp.ename%TYPE;
v_sal emp.sal%TYPE; --定义游标
CURSOR emp_cursor IS
SELECT empno, ename, sal from emp; BEGIN --循环开始
LOOP IF NOT emp_cursor%ISOPEN THEN
OPEN emp_cursor;
END IF; FETCH emp_cursor INTO v_empno, v_ename, v_sal;
--退出循环的条件
EXIT WHEN emp_cursor%NOTFOUND OR emp_cursor%NOTFOUND IS NULL; dbms_output.put_line('员工编号为' || v_empno || '的' || v_ename || '薪水为:' || v_sal); END LOOP; END;
/

3.执行存储过程

exec proc_salary;

SQL> exec proc_salary;
员工编号为7369的SMITH薪水为:800
员工编号为7499的ALLEN薪水为:1600
员工编号为7521的WARD薪水为:1250
员工编号为7566的JONES薪水为:2975
员工编号为7654的MARTIN薪水为:1250
员工编号为7698的BLAKE薪水为:2850
员工编号为7782的CLARK薪水为:2450
员工编号为7788的SCOTT薪水为:3000
员工编号为7839的KING薪水为:5000
员工编号为7844的TURNER薪水为:1500
员工编号为7876的ADAMS薪水为:1100
员工编号为7900的JAMES薪水为:950
员工编号为7902的FORD薪水为:3000
员工编号为7934的MILLER薪水为:1300 PL/SQL procedure successfully completed. Elapsed: 00:00:00.00

Oracle存储过程中游标的简单使用的更多相关文章

  1. Oracle数据库中游标的游标的使用

    本人不喜欢说概念啥的,就直接说明使用方法吧 案例1: DECALRE --声明游标 CURSOR C_USER(C_ID NUMBER) IS SELECT NAME FROM USER WHERE ...

  2. oracle 存储过程 包 【转】

    一.为什么要用存储过程? 如果在应用程序中经常需要执行特定的操作,可以基于这些操作简历一个特定的过程.通过使用过程可以简化客户端程序的开发和维护,而且还能提高客户端程序的运行性能. 二.过程的优点? ...

  3. oracle 存储过程

    来自:http://www.jb51.net/article/31805.htm Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 I ...

  4. Oracle存储过程语法

    原文链接:http://www.jb51.net/article/31805.htm Oracle存储过程基本语法 存储过程  1 CREATE OR REPLACE PROCEDURE 存储过程名  ...

  5. Oracle存储过程基本语法介绍

    Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR RE ...

  6. Oracle存储过程(转)

    Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR RE ...

  7. ORACLE存储过程学习

    存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR REPLACE PROCEDURE ...

  8. Oracle 存储过程学习

    转自:http://blog.chinaunix.net/uid-20495387-id-174394.html http://www.cnblogs.com/rootq/articles/11000 ...

  9. Oracle 存储过程异常处理

    Oracle 存储过程异常处理 1.异常的优点    如果没有异常,在程序中,应当检查每个命令的成功还是失败,如  BEGIN  SELECT ...  -- check for ’no data f ...

随机推荐

  1. document.visibilityState 监听浏览器最小化

    document.hidden:表示页面是否隐藏的布尔值.页面隐藏包括 页面在后台标签页中 或者 浏览器最小化 (注意,页面被其他软件遮盖并不算隐藏,比如打开的 sublime 遮住了浏览器). do ...

  2. 原生js--cookie操作的封装

    封装cookie的操作:查询cookie个数.查询所有cookie的键.获取cookie.设置cookie.删除cookie.清除全部cookie /** * cookieStorage */func ...

  3. router之switch

    比较路由中有无switch的区别: 代码一: <Router history={history}> <Route exact path="/" component ...

  4. ps软件使用的问题解决记录

    1.PS的字体颜色改变不了的解决方法,添加字体的时颜色无论怎么选都只能有[黑.白.灰]三种颜色,     问题的原因:图像的模式选择了灰度(G)     解决方法:图像-->模式-->RG ...

  5. python--利用列表推导式快速生成xml格式数据

    在接口自动化测试中,我们经常将要发送的数据放到excel里. json数据放至excel方便,但最近的一个测试,数据是xml格式发送的 如下: 属性 必选/可选 描述 1. Message Eleme ...

  6. 解决 java.lang.IllegalThreadStateException: Thread already started. 错误

    extends:http://blog.csdn.net/liuhanhan512/article/details/7575386 android开发中,对线程的操作比较悲催,start一个线程后,必 ...

  7. Win7去掉桌面图标小箭头

    去掉win7的快捷方式的小箭头: 每当我们装完一个软件,在桌面生成快捷方式的时候总会有个小箭头,有些朋友看到觉得很烦,如何去掉这个小箭头呢? 点击开始图标 - 附件 - 命令提示符(有情提示,请右击用 ...

  8. Centos 添加永久路由

    今天在用虚拟机测试的时候,突然发现外网不通了,记得之前加过路由的,重启网络服务后就没了,仔细一想,应该是添加的路由是临时的,一重启就没了,于是乎就有了想把它永久写入的冲动,在看了一些文档之后,只要在/ ...

  9. HOJ-2662Pieces Assignment(状态压缩,动态规划)

    Pieces Assignment Source : zhouguyue Time limit : 1 sec Memory limit : 64 M Submitted : 415, Accepte ...

  10. .Net微服务架构之运行日志分析系统

    一.引言 .Net技术栈目前还没有像spring cloud相对完整一整微服务架构栈,随着业务发展系统架构演进,自行构建.Net技术体系的微服务架构,配套相关核心组件.因平台基于微服务架构方式研发,每 ...