Oracle游标总结
2016-07-04 11:44
375 查看
1.声明游标
2.打开游标
open 游标名;
3.提取游标
fetch 游标名 into 变量列表
4.关闭游标
close 游标名
使用显示游标:
1):使用前用游标名%ISOPEN检查打开状态,只有值为TRUE是才可使用
2):使用游标每次都要用%NOTFUND,%FUND确认是否返回成功
3):提取游标时对应变量个数一致
4):必须关闭游标释放资源
1.%fund是否找到有效行,是则为true 否则是false
SQL%fund
2.%NOTFOUND
SQL%NOTFOUND
3.%ROWCOUNT
该属性记录了游标抽取过的记录行数,也可以理解为当前游标所在的行号,这个属性在循环判断中有效
用FOR语句控制游标的循环,系统隐含的定义了一个数据类型为%ROWCOUNT的记录,作为循环计数器,并将隐士的打开和关闭游标
4.%ISOPEN
... ...
5.参数话游标:
特殊的游标类型
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 PL/SQL入门
- Oracle PL/SQL进阶
- Oracle PL/SQL基础知识
- oracle表分区详解
- Oracle常用脚本汇总
- Oracle入门之XP下常用默认配置(pagesize,linesize,editor等)
- Oracle表中序列号的添加
- oracle 分组函数rank() over(),dense_rank(),row_number()
- Oracle SQL性能优化
- ORACLE的闪回
- Oracle常见的问题
- oracle 全角半角转换函数.
- 连接Oracle时报错ora-01034与ORA-27101
- Oracle----Oracle 11g XE release2安装与指导
- ORACLE数据库函数大全
- Oracle ORA-01033: ORACLE initialization or shutdown in progress 错误解决办法
- Oracle中Sequence序列的使用
- 甲骨文与开源之间的那些事
- 甲骨文与开源之间的那些事
- Oracle的substr函数简单用法