1.声明游标

declare
teacher_id number(5);
teacher_name varchar2(5);
teacher_title varchar2(50);
teacher_sex char(1); cursor teacher_cur is
select tid,tiname,title,sex from teachers where tid<117;

2.打开游标

open 游标名;

declare
teacher_id number(5);
teacher_name varchar2(5);
teacher_title varchar2(50);
teacher_sex char(1); cursor teacher_cur is
select tid,tiname,title,sex from teachers where tid<117;
open teacher_cur;

3.提取游标

fetch 游标名 into 变量列表

declare
teacher_id number(5);
teacher_name varchar2(5);
teacher_title varchar2(50);
teacher_sex char(1); cursor teacher_cur is
select tid,tiname,title,sex from teachers where tid<117;
open teacher_cur;
fetch teacher_cur into tid,tinme,title,sex;

4.关闭游标

close 游标名

declare
teacher_id number(5);
teacher_name varchar2(5);
teacher_title varchar2(50);
teacher_sex char(1); cursor teacher_cur is
select tid,tiname,title,sex from teachers where tid<117;
open teacher_cur;
fetch teacher_cur into tid,tinme,title,sex;
Loop
EXIT WHEN NOT teacher_cur%FUND;
IF teaher_sex = 'M' THEN
INSERT INTO MALE_TEACHERS(TID,TNAME,TITLE) VALUES();
ELSE
INSERT INTO FEMALE_TEACHERS(TID,TNAME,TITLE) VALUES(teacher_id,teacher_name,teacher_title);
END IF;
FETCH teacher_cur INTO teacher_id,teacher_name,teacher_title,teacher_sex;
END LOOP;
CLOSE teacher_cur;
END;

使用显示游标:

1):使用前用游标名%ISOPEN检查打开状态,只有值为TRUE是才可使用

2):使用游标每次都要用%NOTFUND,%FUND确认是否返回成功

3):提取游标时对应变量个数一致

4):必须关闭游标释放资源


1.%fund是否找到有效行,是则为true 否则是false

open teacher_cur;
fetch teacher_cur into teacher_id,teacher_name,teacher_title,teacher sex;
loop
exit when not teacher_cur%found;
end loop

  SQL%fund

delete from teachers
where tid=teacher_id;
if SQL%found then
insert into success values(tid);
else
insert into fail values(tid);
end if;

2.%NOTFOUND

OPEN teacher_cur;
FETCH teacher_cur INTO teacher_id,teacher_name,teacher_title,teacher_sex;
LOOP
EXIT WHEN teacher_cur%NOTFOUND;
END LOOP

  SQL%NOTFOUND

DELETE FROM TEACHERS
WHERE TID = teacher_id;
IF SQL%NOTFOUND THEN
INSERT INTO FALL VALUES(TID);
ELSE
INSERT INTO SUCCESS VALUES(TID);
END IF;

3.%ROWCOUNT

该属性记录了游标抽取过的记录行数,也可以理解为当前游标所在的行号,这个属性在循环判断中有效

LOOP
FETCH teacher_our INTO teacher_id,teacher_name,teacher_title,teacher_sex;
EXIT WHEN teacher_cur%ROWCOUNT=10;--只抽取10条记录
...
END LOOP;

用FOR语句控制游标的循环,系统隐含的定义了一个数据类型为%ROWCOUNT的记录,作为循环计数器,并将隐士的打开和关闭游标

FOR teacher_record in teacher_cur LOOP --teacher_record作为记录名,隐含的代开游标teacher_cur
INSERT INTO TEMP TEACHERS(TID,TNAME,TITLE,SEX) VALUES(teacher_record,tid,teacher_record,tname,teacher_record,title,teacher_record.sex);
END LOOP

4.%ISOPEN

... ...

5.参数话游标:

DECLARE
--定义游标是带上参数CURSOR_ID
CURSOR teacher_cur(CURSOR_id NUMBER) IS
SELECT TNAME,TITLE,SEX FROM TEACHERS WHERE TID=CURSOR_id;--使用参数
BEGIN
OPEN teacher_cur(my_tid);--带上参数
LOOP
FETCH teacher_cur INTO teacher_name,teacher_title,teacher_sex;
EXIT WHEN teacher_cur%NOTFOUND;
...
END LOOP;
CLOSE teacher_cur;
END;

特殊的游标类型

declare
r_emp emp%ROWTYPE; --该类型为emp表中一行的类型
cursor c_emp is SELECT * FROM emp ;
BEGIN
OPEN c_emp;
LOOP
FETCH c_emp into r_emp; --游标中查询出来的一行into进定义的变量r_emp中
EXIT WHEN c_emp%NOTFOUND;
dbms_output.put_line('员工姓名:' || r_emp.ename);
END LOOP;
CLOSE c_emp;
END;

Oracle游标总结的更多相关文章

  1. Oracle 游标示例,带异常处理

    Oracle游标示例一则,带异常处理. DECLARE CURSOR c_dl IS SELECT ID, NSRSBH, WSPZXH, ZXYY_DM, HZRQ, SWJG_DM, GXSJ F ...

  2. Oracle游标带参数

    Oracle游标是可以带参数的,而SqlServer的游标就不可以了 create or replace procedure a as cursor b(c_id int)is select * fr ...

  3. Oracle 游标使用(转)

    这个文档几乎包含了oracle游标使用的方方面面,全部通过了测试 ; ; dbms_output.put_line(sql) loop dbms_output.put_line( ; ; ; r_te ...

  4. Oracle 游标使用全解(转)

    转自:http://www.cnblogs.com/sc-xx/archive/2011/12/03/2275084.html 这个文档几乎包含了oracle游标使用的方方面面,全部通过了测试 -- ...

  5. Oracle游标动态赋值

    1. oracle游标动态赋值的小例子 -- 实现1:动态给游标赋值 -- 实现2:游标用表的rowtype声明,但数据却只配置表一行的某些字段时,遍历游标时需fetch into到精确字段 CREA ...

  6. dapper支持oracle游标

    dapper支持oracle游标 Dapper是一个轻型的ORM类.它有啥优点.缺点相信很多朋友都知道了,园里也有很多朋友都有相关介绍,这里就不多废话. 如果玩过Oracle都知道,存储过程基本都是通 ...

  7. Oracle游标的使用示例

    此文是使用Oracle游标的几种方式,for...in会自动打开游标,fetch...into需要手动打开游标,游标类似于一个只会往前移动的指针,每次指向数据集中的一行数据,通过游标可以打开数据集,也 ...

  8. Oracle游标介绍

    Oracle游标使用详解: 游标: 用来查询数据库,获取记录集合(结果集)的指针,我们所说的游标通常是指显式游标,因此从现在起没有特别指明的情况,我们所说的游标都是指显式游标.要在程序中使用游标,必须 ...

  9. Oracle游标使用

    Oracle游标介绍: --声明游标 CURSOR cursor_name IS select_statement --For 循环游标 --()定义游标 --()定义游标变量 --()使用for循环 ...

  10. [转载]Oracle 游标使用全解

    这个文档几乎包含了oracle游标使用的方方面面,全部通过了测试 -- 声明游标:CURSOR cursor_name IS select_statement --For 循环游标--(1)定义游标- ...

随机推荐

  1. Spring @ResponseBody只能返回String类型数据解决办法

    今天自己搭Spring MVC框架玩,使用AJAX调用Spring controller 并返回map对象,突然发现,哎,怎么@Response中只能返回String, 我用的Spring 3的版本也 ...

  2. iOS NSFileManager

    今天,用到了文件的管理,发现自己又忘得差不多了.屋里有个苍蝇,老是在眼前晃来晃去,好是烦人. 用到了两个地方: 1. 创建文件夹: 2. 移动文件 功能还有很多,今天先总结两个! 1. 创建文件夹: ...

  3. 【转】Android绘制View的过程研究——计算View的大小

    Android绘制View的过程研究——计算View的大小 转自:http://liujianqiao398.blog.163.com/blog/static/18182725720121023218 ...

  4. 常用公共的css的样式

    html{-webkit-text-size-adjust:none; /*解决chrome浏览器下字体不能小于12px*/} body{overflow-x: hidden; font-size:1 ...

  5. Ionic 小节

    教程 http://www.runoob.com/ionic/ionic-install.html 最后报错,发现是jdk版本过低,升级到8.0后正常 分析:nodejs.cordova.ionic. ...

  6. RouterOS 软路由开启SSH服务器

    RouterOS软路由可以支持多种服务,例如SSH.FTP.Telnet.www等等 图形介面操作 命令操作 [admin@MikroTik] > ip service print        ...

  7. java获取泛型的真实类型

    ParameterizedType type = (ParameterizedType)this.getClass().getGenericSuperclass(); Type[] actualTyp ...

  8. CNContact对通讯录的基本使用(增删改查)

    /** * 注意:iOS9才有能使用 * 首先在工程里导入ContactsUI.framework和Contacts.framework两个框架 * * * 源代码的链接地址 * 链接: http:/ ...

  9. UITableView + UISearchBar 实现搜索功能

    #import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDelegate> @pr ...

  10. Java基础之创建窗口——使用卡片布局管理器(TryCardLayout)

    控制台程序. 卡片布局管理器会生成一叠组件——一个组件放在另一个组件的上面.添加到容器中的第一个组件在堆栈的顶部,因此是可见的,添加的最后一个组件在堆栈的底部.使用默认的构造函数CardLayout( ...