oracle 游标
时间:2019-08-20
本文章向大家介绍oracle 游标,主要包括oracle 游标使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
oracle 游标
select * from myuser for update;
begin
update myuser set password='654321' where id=5;
dbms_output.put_line('上述操作影响了'||sql%rowcount||'条记录');
if(sql%found) then
dbms_output.put_line('有找到要修改的数据');
else
dbms_output.put_line('未找到数据');
end if;
end;
--最简单的游标,定义指向scott.emp 表记录集的游标,并且遍历
--使用游标遍历输出所有职员的编号和姓名
declare
cursor mycur --1、定义游标
is
select empno,ename from scott.emp;
v_empno scott.emp.empno%type;
v_ename scott.emp.ename%type;
begin
--2、打开游标
if(not mycur%isopen) then
open mycur;
end if;
--3、从游标中提取记录
loop
fetch mycur into v_empno,v_ename;
if(mycur%notfound) then
exit;
end if;
dbms_output.put_line('第'||mycur%rowcount||'记录:'||v_empno||','||v_ename);
end loop;
--4、关闭游标
close mycur;
end;
--带参数的游标
--使用游标遍历输出指定部门的所有职员的姓名和编号
declare
cursor mycur(v_deptno number) --1、定义游标
is
select empno,ename from scott.emp where deptno=v_deptno;
v_empno scott.emp.empno%type;
v_ename scott.emp.ename%type;
begin
--2、打开游标
if(not mycur%isopen) then
open mycur('&deptno');
end if;
--3、从游标中提取记录
loop
fetch mycur into v_empno,v_ename;
if(mycur%notfound) then
exit;
end if;
dbms_output.put_line('第'||mycur%rowcount||'记录:'||v_empno||','||v_ename);
end loop;
--4、关闭游标
close mycur;
end;
--强制写入的游标
--对指定部门的员工薪资提升10%
declare
cursor mycur(v_deptno number) --1、定义游标
is
select empno from scott.emp_temp where deptno=v_deptno for update of sal nowait;
--无需进行事务等待的强制读取,避免死锁,多线程条件下相对安全的写入机制,如果没有 of sal的话就支持全表更新。
v_empno scott.emp_temp.empno%type;
begin
--2、打开游标
if(not mycur%isopen) then
open mycur('&deptno');
end if;
--3、从游标中提取记录
loop
fetch mycur into v_empno;
if(mycur%notfound) then
exit;
end if;
update scott.emp_temp set sal=sal*1.1 where empno=v_empno;
end loop;
commit;
dbms_output.put_line('上述操作更新了'||sql%rowcount||'条记录');
--4、关闭游标
close mycur;
end;
--游标简化1:
declare
cursor mycur(v_deptno number)--1、定义游标
is
select empno,ename from scott.emp where deptno=v_deptno;
begin
--2、使用游标提取
for cur in mycur('&deptno') loop
dbms_output.put_line('第'||mycur%rowcount||'记录:'||cur.empno||','||cur.empno);
end loop;
end;
----游标简化2:
begin
for cur in (select empno,ename from scott.emp where deptno='&deptno') loop
dbms_output.put_line(cur.empno||','||cur.empno);
end loop;
end;
--什么时候用简化1?简化2?
--批量修改数据的时候用简化2。写存储过程或者函数的时候用简化1
create table emp_temp as select * from emp;
select * from emp_temp;
原文地址:https://www.cnblogs.com/Jotal/p/11381911.html
- Linux DNS之dig利器
- Docker系列教程08-Dockerfile实战
- VirtualBox和Vmware安装增强功能
- 事件委托与阻止冒泡
- Linux网络工具之Ping命令
- Linux DNS之nslookup命令
- 【LEETCODE】模拟面试-108-Convert Sorted Array to Binary Search Tree
- javascript单线程环境实现真正的setTimeout
- 利用pipework与OVS构建跨主机容器网络
- Docker系列教程07-Dockerfile指令详解
- Docker系列教程06-实战:修改Nginx首页
- prompt() 方法,弹框带输入框
- Docker系列教程05-容器常用命令
- 数据分析利器-NumPy
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法