PL/SQL编程—游标
一、游标的相关概念:
定义:
游标它是一个服务器端的存储区,这个区域提供给用户使用,在这个区域里
存储的是用户通过一个查询语句得到的结果集,用户通过控制这个游标区域当中
的指针 来提取游标中的数据,然后来进行操作。

实质:
是用户在远程客户端上对服务器内存区域的操作,由数据库为用户提供这样的
一个指针,使得用户能够去检索服务器内存区的数据。
(1)、 指向上下文区域的句柄或指针
(2)、上下文区域-用于SQL处理的内存区
(3)、上下文区域的内容
- 语句处理的行数
-指向语句的语法分析表示的指针
二、游标的类型
a)静态游标
- 隐式游标
- 显式游标
b)Ref游标
三、游标具有的属性
%notfound 询问是否没有结果集
%found 询问是否存在结果集
%rowcount 返回受影响的行数
%isopen 询问游标是否已经打开
四、隐式游标
隐式游标 ---由Oracle数据库自动创建,名称是(SQL) ,主要用途是可以返回一个操作是否成功或失败.
1.有Oracle在内部声明,由系统管理
2.用于处理
-DML语句 --注意只能用于DML语句哦。
-返回单行的查询
3.用于判断一个操作是否成功.
SQL%notfound --返回Boolean值 存在结果集返回 False
SQL%found --返回Boolean值 存在结果集返回 True
SQL%rowcount --用户成功提取数据的行数
SQL%isopen --在隐式游标里一般这个属性是自动打开和关闭的.且任何时候查询都返回False
示例:向表中插入一行数据,询问是否插入成功.
declare
iCount int:=0;
begin
insert into place values(2,'beijing');
DBMS_output.put_line('游标所影响的行数:'||SQL%rowcount);
if SQL%NotFount then
DBMS_output.put_line('NotFount为真);
else
DBMS_output.put_line('NofFount为假');
end if;
if SQL%Fount then
DBMS_output.put_line('Fount为真);
else
DBMS_output.put_line('Fount为假');
end if; if SQL%isopen then
DBMS_output.put_line('isOpen为真);
else
DBMS_output.put_line('isOpen为假');
end if;
isCount:=SQL%rowcount;
DBMS_output.put_line('影响了'||isCount||'行');
end;



显示游标:

SQL> declare
2 --定义游标类型sp_test_cursor
3 type sp_test_cursor is ref cursor;
4 --定义一个游标变量
5 test_cursor sp_test_cursor;
6 --定义变量
7 v_name mytest.name%type;
8 v_passwd mytest.passwd%type;
9 begin
10 --执行 把cursor和一个select结合
11 open test_cursor for select name,passwd from mytest;
12 loop
13 fetch test_cursor into v_name,v_passwd;
14 --跳出循环的条件即判断当前游标是否为空
15 exit when test_cursor%notfound;
16 dbms_output.put_line('name:'||v_name||' passwd:'||v_passwd);
17 end loop;
18 --关闭游标
19 close test_cursor;
20 end;
21 / name:123 passwd:123
name:gaodingle!!!! passwd:123
name:gagaga passwd:123
name:125555 passwd:passwd PL/SQL procedure successfully completed SQL> declare
2 type sp_cursor is ref cursor;
3 test_cursor sp_cursor;
4 v_id mytest.id%type;
5 v_name mytest.name%type;
6 v_passwd mytest.passwd%type;
7 v_salary mytest.salary%type;
8 begin
9 open test_cursor for select id,name,passwd,salary from mytest;
10 loop
11 fetch test_cursor into v_id,v_name,v_passwd,v_salary;
12 if v_salary=100 then
13 update mytest set salary=v_salary+50 where id=v_id;
14 end if;
15 exit when test_cursor%notfound;
16 end loop;
17 close test_cursor;
18 end;
19 / PL/SQL procedure successfully completed SQL> select * from mytest; ID NAME PASSWD SALARY
----- -------------------- -------------------- --------------------------------------------------------------------------------
1 123 123 150
2 gaodingle!!!! 123 150
3 gagaga 123 150
4 125555 passwd 50
PL/SQL编程—游标的更多相关文章
- [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到)
原文:[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]ORACLE PL/SQL编程之四: 把游标说透(不怕做不到,只怕想不到) 继上两篇:ORACLE PL ...
- ORACLE PL/SQL编程详解
ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设 ...
- pl/sql编程
body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...
- [强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)
原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天 ...
- ORACLE PL/SQL编程之八:把触发器说透
原文:ORACLE PL/SQL编程之八:把触发器说透 ORACLE PL/SQL编程之八: 把触发器说透 大家一定要评论呀,感谢!光发表就花了我将近一个下午. 本篇主要内容如下: 8.1 触发器类型 ...
- [推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼、百战不殆)
原文:[推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼.百战不殆) [推荐]ORACLE PL/SQL编程之五: 异常错误处理(知已知彼.百战不殆) 继上三篇:ORACLE PL/S ...
- [推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆)
原文:[推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆) [推荐]ORACLE PL/SQL编程详解之三: PL/SQL流程控制语句(不给规则,不成方圆) ...
- 【强烈强烈推荐】《ORACLE PL/SQL编程详解》全原创(共八篇)--系列文章导航
原文:[强烈强烈推荐]<ORACLE PL/SQL编程详解>全原创(共八篇)--系列文章导航 <ORACLE PL/SQL编程详解> 系列文章目录导航 ——通过知识共享树立个人 ...
- [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)
原文:[推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下) [推荐]ORACLE PL/SQL编程详解之一: PL/SQL 程序设计简介(千里之行,始于足下 ...
随机推荐
- 使用jmeter实现对jar包的调用
一.前言 在我们测试接口的过程中,可能有时需要用到第三方jar包来生成一些测试数据(如有时需要对参数的输入值使用第三方jar包进行加密操作),涉及到这种的情况,普遍做法是:手动调用jar包获得需要的值 ...
- redux sample with redux source code
code sample没有package.json文件,也就没有任何外部依赖,直接使用redux source code. nodejs对es6的import export还不支持,这里使用了stac ...
- Java实现验证码的制作
验证码概述 为什么使用验证码? 验证码(CAPTCHA)是一种全自动程序.主要是为了区分“进行操作的是不是人”.如果没有验证码机制,将会导致以下的问题: 对特定网站不断进行登录,破解密码: 对某个网站 ...
- 64位系统下,一个32位的程序究竟可以申请到多少内存,4GB还是更多?(一)
前言: cpu的位是指一次性可处理的数据量是多少,1字节=8位,32位处理器可以一次性处理4个字节的数据量,依次类推.32位操作系统针对的32位的CPU设计.64位操作系统针对的64位的CPU设计.操 ...
- 【BZOJ】3403: [Usaco2009 Open]Cow Line 直线上的牛(模拟)
http://www.lydsy.com/JudgeOnline/problem.php?id=3404 裸的双端队列.. #include <cstdio> #include <c ...
- backbone Model调用save方法的时候提交方式
horizon使用的是backbone框架,但是我们的后台api都是只接收post请求,请求的路径为/api/,根据backbone的官档解释: backbone的model.save方法会判断当前的 ...
- mysql快速上手
mysql简介 1.什么是数据库 ? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅 ...
- DevExpress 控件使用技巧
DevExpress是非常主流的.NET控件,眼下全世界和中国都用非常多用户使用,只是因为是英文版,初次接触的同学可能会认为困难.这里就总结DevExpress常见的10个使用技巧. 1.TextEd ...
- 【python】函数参数-任意参数
def min1(args): res=args[0] for arg in args[1:]: if arg<res: res=arg return res def min2(first,re ...
- poj 1129(dfs+图的四色定理)
题目链接:http://poj.org/problem?id=1129 思路:根据图的四色定理,最多四种颜色就能满足题意,使得相邻的两部分颜色不同.而最多又只有26个点,因此直接dfs即可. #inc ...