Oracle Day 08 游标与例外的总结
1.游标的使用(cursor)
基本格式:
定义游标: cursor 游标名 is select语句(查询要操作的数据);
自定义参数:参数名1 对应表中的字段1;
参数名2 对应表中的字段2;
打开游标: open 游标名;
loop(循环)
fetch ... into ...; 抓取一行到自定义变量里面
exit when ...%notfound; 退出循环的条件
具体操作...
end loop; 关闭循环
关闭游标: close 游标名;
例:
declare
cursor cemp is select job,sal from emp; ###定义了一个名称是cemp的游标,游标中的数据是select job,sal from emp;中查询出的数据
cjob emp.job%type; ###定义变量cjob,对应emp表中的job字段
csal emp.sal%type; ###定义变量csal,对应emp表中的sal字段
begin
open cemp; ###打开游标
loop ###循环
fetch cemp into cjob,csal; ###抓取游标中的一行数据赋值给变量cjob,csal
exit when cemp%notfound; ###退出条件:cemp%notfound表示游标没有抓取到数据了
dbms_output.put_line('您的工作为' || cjob || '您的工资为' || csal); ###具体操作:打印工作、工资
end loop; ###结束循环
close cemp; ###关闭游标
end;
/
-- 游标的四个属性
1). %isopen 判断游标是否打开
2). %rowcount 影响的行
3). %found 还有下一条数据
4). %notfound 没有下一条数据
例: --根据emp表员工的职位涨工资,总裁涨1000,经理涨800,其他涨400。
declare
cursor cemp is select empno,job from emp;
pempno emp.empno%type;
pjob emp.job%type;
begin
open cemp;
loop
fetch cemp into pempno,pjob;
exit when cemp%notfound;
if pjob ='PRESIDENT' then update emp set sal = sal + 1000 where empno = pempno;
elsif pjob='MANAGER' then update emp set sal = sal + 800 where empno = pempno;
else
update emp set sal = sal + 400 where empno = pempno;
end if;
end loop;
close cemp;
end;
/
注意:elsif 的书写。
-- 带参数的游标
例: -- 要查询emp表任意部门的员工信息。(10号部门)
declare
cursor cemp(pdeptno number) is select empno,ename from emp where deptno = pdeptno;
pempno emp.empno%type;
pname emp.ename%type;
begin
open cemp(10);
loop
fetch cemp into pempno,pname;
exit when cemp%notfound;
dbms_output.put_line(pempno || ' ' || pname );
end loop;
close cemp;
end;
/
2.例外(exception)
例:
1 declare
2 pnum number := 0;
3 begin
4 pnum := 1/pnum; -- 会抛出一个叫zero_divide的异常
5* end;
6 /
declare
*
第 1 行出现错误:
ORA-01476: 除数为 0
ORA-06512: 在 line 4
自定义一个例外(异常)
1 declare
2 pnum number := 0;
3 begin
4 pnum := 1/pnum; -- 会跑出一个叫zero_divide的异常
5 exception
6 when zero_divide then dbms_output.put_line('不能被0除');
7* end;
SQL> /
不能被0除
例: -- 查询50号部门的所有员工的姓名,如果没有查到数据抛出列外。
1 declare
2 cursor cemp is select ename from emp where deptno = 50;
3 pname emp.ename%type;
4 -- 自己定义异常
5 not_emp_data exception;
6 begin
7 open cemp;
8 fetch cemp into pname;
9 if cemp%notfound then
10 dbms_output.put_line('');
11 raise not_emp_data;
12 else
13 loop
14 exit when cemp%notfound;
15 dbms_output.put_line(pname);
16 end loop;
17 end if;
18 close cemp;
19 exception
20 when not_emp_data then dbms_output.put_line('没有找到50号部门的数据');
21* end;
SQL> /
11
没有找到50号部门的数据
Oracle Day 08 游标与例外的总结的更多相关文章
- (转)oracle 存储过程 带游标作为OUT参数输出
(转)oracle 存储过程 带游标作为OUT参数输出 存储过程返回OUT参数的游标 例子. 包中带过程 要自己定义一个type [cur_name] is ref cursor游标,返回的时候就直接 ...
- oracle 中的游标
oracle 中的游标 通俗易懂的sql代码直接上! --简单的游标使用滴呀 --使用FOR OBJ IN OBJS LOOP ......END LOOP; DECLARE CURSOR C_JOB ...
- Oracle中使用游标转换数据表中指定字段内容格式(拼音转数字)
应用场景:将数据表TB_USER中字段NNDP的内容中为[sannanyinv]转换为[3男1女] 主要脚本:一个游标脚本+分割字符串函数+拼音转数字脚本 操作步骤如下: 1.创建类型 create ...
- Oracle中使用游标获取指定数据表的所有字段名对应的字符串
操作步骤:打开PLSQL Developer后,直接执行下面的语句就可以出来 --Oracle中使用游标获取指定数据表的所有字段名对应的字符串 declare mytablename VARCHAR( ...
- oracle超出打开游标的最大数的原因和解决方案
oracle超出打开游标的最大数的原因和解决方案 分类: Oracle相关2012-06-05 10:36 6362人阅读 评论(0) 收藏 举报 oracle数据库sqljavasessionsys ...
- Java调用oracle存储过程通过游标返回临时表数据
注:本文来源于 < Java调用oracle存储过程通过游标返回临时表数据 > Java调用oracle存储过程通过游标返回临时表数据 项目开发过程中,不可避免的会用到存储过程返回结 ...
- oracle存储过程和游标的使用
oracle存储过程和游标的使用 (2011-04-19 14:52:47) 转载▼ 游标: 用来查询数据库,获取记录集合(结果集)的指针,我们所说的游标通常是指显式游标,因此从现在起没有特别指明的情 ...
- Oracle中的游标(转)
Oracle中的游标有两种:显式游标.隐式游标.显示游标是用cursor...is命令定义的游标,它可以对查询语句(select)返回的多条记录进行处理,而隐式游标是在执行插入 (insert).删除 ...
- Oracle存储过程、游标、函数
SQL99是什么 (1)是操作所有关系型数据库的规则 (2)是第四代语言 (3)是一种结构化查询语言 (4)只需发出合法合理的命令,就有对应的结果显示 SQL的特点 (1)交互性强,非过程化 (2)数 ...
随机推荐
- tastypie Django REST framework API [Hello JSON]
tastypie is a good thing. Haven't test it thoroughly. Gonna need some provement. Now I will introduc ...
- [置顶] javascript-基于对象or面向对象?
最近完成了javascript的初级学习,在这个学习的视频中,我特别注意了两个词,解释性语言和对象,javascript按照我的理解,应该是种解释性语言,他有关于面向对象的思想的体现,但是,他和vb一 ...
- SESSION会话技术
以下对session会话技术详解: 要了解点http协议理解更佳--->http请求头和http相应头 在session_start的时候,浏览器会向服务器发出请求 在请求的同时,如果是第一次a ...
- poj1483 It's not a Bug, It's a Feature!
It's not a Bug, It's a Feature! Time Limit: 5000MS Memory Limit: 30000K Total Submissions: 1231 ...
- x86中的页表结构和页表项格式
一.页表结构 分页转换功能由驻留在内存中的表来描述,该表称为页表(page table),存放在物理地址空间中.页表可看做简单的220个物理地址数组.线性到物理地址的映射功能可以简单地看做进行数组查找 ...
- Hibernate介绍和入门案例
一身转战三千里,一剑曾当百万师 如果你在之前没有学过SSH三大框架,那么你之前肯定是通过JDBC来对数据库进行操作.现在,你完全可以把跟数据库交互的操作直接交给Hibernate. Hibernate ...
- 一个问题:关于finally中return吞掉catch块中抛出的异常
今天遇到一个感觉很神奇的问题,记录一下问题以及自己分析问题的思路. 预警:不知道怎么看java字节码的朋友可能需要先看一下如何阅读java字节码才能看懂后面的解释. 我有一段程序: public cl ...
- WebView使用input file控件打开相册上传图片
使用 WebView 直接用 控件选择相册图片 package com.moguzhuan.android.zhuan; import android.annotation.TargetApi; im ...
- 软件各种版本的含义!例如RC,M,GA等等
RC版本 RC:(Release Candidate) Candidate是候选人的意思,用在软件上就是候选版本.Release是发行.发布的意思.Release.Candidate.就是发行 ...
- 为知笔记markdown插件安装
Wiz.Editor.md 是一个基于 Editor.md 构建的为知笔记 Markdown 插件. 主要特性 多种样式主题 支持实时预览 支持代码高亮 支持搜索替换 支持ToC目录 Tex数学公式 ...