- 浏览: 251159 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
Orc3Ming:
哦,脚本的解释路径,不是注释。
RHEL6.4更改为CentOS6.4的yum源 -
Orc3Ming:
将第一行 #!/usr/bin/python 修改为 #!/u ...
RHEL6.4更改为CentOS6.4的yum源 -
anniecharlotte:
请问:如果登录某个节点
执行nodetool ring查看集群 ...
Cassandra集群 -
Q_Qkings8:
给了我好的提示,已经成功的解决了问题
Eclipse Debug Source not found for -
kevin.wang:
feijin1981 写道我也有同样的问题,但是Window ...
Eclipse Debug Source not found for
对于普通数据库,主语言是面向记录的,一组主变量一次只能存放一条记录。
游标的优点
游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标总是与一条SQL 选择语句相关联因为游标由结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。当决定对结果集进行处理时,必须声明一个指向该结果集的游标。
游标允许应用程序对查询语句select 返回的行结果集中每一行进行相同或不同的操作,而不是一次对整个结果集进行同一种操作;它还提供对基于游标位置而对表中数据进行删除或更新的能力;而且,正是游标把作为面向集合的数据库管理系统和面向行的程序设计两者联系起来,使两个数据处理方式能够进行沟通。
一、参数游标
参数游标是带有参数的游标,在定义参数游标之后,当使用不同参数值多次打开游标时,可以产生不同的结果集,语法如下:
cursor cursor_name(parameter_name datatype) is select_statement;
定义参数游标时,游标参数只能指定数据类型,而不能指定长度。
示例如下:
二、使用游标更新或删除数据
通过使用显示游标,不仅可以一行一行的处理select语句结果,而且也可以更新或删除当前游标的数据,注意,如果要通过游标更新或删除数据,在定义游标时一定要带有for update子句,语法如下:
cursor cursor_name(parameter_name datatype) is select_statement for updae [of column_reference][nowait];如上所示:for update子句用于在游标结果集数据上加行共享锁,以防止其他用户在相应行上执行DML操作,当select语句要引用到多张表是,使用of子句可以确定哪些表要加锁,如果没有of子句,则会在select语句所引用的全部表上加锁,nowait用于指定不等待锁,为了更新或删除当前游标行数据,必须在update 或delete语句中引用where current of 子句,语法如下:
update table_name set column=.. where current of cursor_name;
delete from table_name where current of cursor_name;
1、使用游标更新数据
2、使用游标删除数据
3、使用of子句在特定表加行共享锁。
如果使用子查询涉及到多张表,那么默认情况下会在所有表上加行共享锁,为了只在特定表上加行共享锁,需要在for update子句后带有of子句,of后面跟字段名,如果跟表名或游标名称,则会报错:标示符无效。示例如下:
4、使用nowait子句
使用for update语句对被作用于行加锁,如果其他会话已经在被作用于行上加锁,那么默认情况下当前会话要一直等待对方释放锁,通过在for update子句中指定 nowait语句,可以避免等待锁,当指定了nowait子句之后,如果其他会话已经在被作用行加锁,那么当前会话会显示错误提示信息,并退出PL/SQL,示例如下:
三、游标for循环
使用游标for循环是循环游标最简单的方法,oracle会隐含打开游标、循环提取数据、关闭游标,语法如下:
for record_name in cursor_name loop
..........
end loop;
如上所示:cursor_name是已经定义的游标名称,record_name是oracle隐含定义的记录变量。
1、使用游标for循环
当使用游标开发程序时,建议使用for循环,从而简化代码程序,示例如下:
2、在游标for循环时直接使用子查询
游标的优点
游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标总是与一条SQL 选择语句相关联因为游标由结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。当决定对结果集进行处理时,必须声明一个指向该结果集的游标。
游标允许应用程序对查询语句select 返回的行结果集中每一行进行相同或不同的操作,而不是一次对整个结果集进行同一种操作;它还提供对基于游标位置而对表中数据进行删除或更新的能力;而且,正是游标把作为面向集合的数据库管理系统和面向行的程序设计两者联系起来,使两个数据处理方式能够进行沟通。
一、参数游标
参数游标是带有参数的游标,在定义参数游标之后,当使用不同参数值多次打开游标时,可以产生不同的结果集,语法如下:
cursor cursor_name(parameter_name datatype) is select_statement;
定义参数游标时,游标参数只能指定数据类型,而不能指定长度。
示例如下:
declare cursor temp_cursor(no number) is select name from cip_temps where id=no; v_name cip_temps.name%type; begin open temp_cursor(1); loop fetch temp_cursor into v_name; exit when temp_cursor%notfound; dbms_output.put_line(v_name); end loop; close temp_cursor; end;
declare cursor temp_cursor(no number) is select name from cip_temps where id=no; v_name cip_temps.name%type; begin open temp_cursor(1); loop fetch temp_cursor into v_name; exit when temp_cursor%notfound; dbms_output.put_line(v_name); end loop; close temp_cursor; end;
二、使用游标更新或删除数据
通过使用显示游标,不仅可以一行一行的处理select语句结果,而且也可以更新或删除当前游标的数据,注意,如果要通过游标更新或删除数据,在定义游标时一定要带有for update子句,语法如下:
cursor cursor_name(parameter_name datatype) is select_statement for updae [of column_reference][nowait];如上所示:for update子句用于在游标结果集数据上加行共享锁,以防止其他用户在相应行上执行DML操作,当select语句要引用到多张表是,使用of子句可以确定哪些表要加锁,如果没有of子句,则会在select语句所引用的全部表上加锁,nowait用于指定不等待锁,为了更新或删除当前游标行数据,必须在update 或delete语句中引用where current of 子句,语法如下:
update table_name set column=.. where current of cursor_name;
delete from table_name where current of cursor_name;
1、使用游标更新数据
declare cursor temp_cursor is select name,address,id from cip_temps for update; v_name cip_temps.name%type; v_address cip_temps.ADDRESS%type; v_id cip_temps.id%type; begin open temp_cursor; loop fetch temp_cursor into v_name,v_address,v_id; exit when temp_cursor%NOTFOUND; if(v_id>4) then update cip_temps set name='name'||to_char(v_id),address='address'||to_char(v_id) where current of temp_cursor; end if; end loop; close temp_cursor; end;
declare cursor temp_cursor is select name,address,id from cip_temps for update; v_name cip_temps.name%type; v_address cip_temps.ADDRESS%type; v_id cip_temps.id%type; begin open temp_cursor; loop fetch temp_cursor into v_name,v_address,v_id; exit when temp_cursor%NOTFOUND; if(v_id>4) then update cip_temps set name='name'||to_char(v_id),address='address'||to_char(v_id) where current of temp_cursor; end if; end loop; close temp_cursor; end;
2、使用游标删除数据
declare cursor temp_cursor is select name,address,id from cip_temps for update; v_name cip_temps.name%type; v_address cip_temps.ADDRESS%type; v_id cip_temps.id%type; begin open temp_cursor; loop fetch temp_cursor into v_name,v_address,v_id; exit when temp_cursor%NOTFOUND; if(v_id>2) then delete from cip_temps where current of temp_cursor; end if; end loop; close temp_cursor; end;
declare cursor temp_cursor is select name,address,id from cip_temps for update; v_name cip_temps.name%type; v_address cip_temps.ADDRESS%type; v_id cip_temps.id%type; begin open temp_cursor; loop fetch temp_cursor into v_name,v_address,v_id; exit when temp_cursor%NOTFOUND; if(v_id>2) then delete from cip_temps where current of temp_cursor; end if; end loop; close temp_cursor; end;
3、使用of子句在特定表加行共享锁。
如果使用子查询涉及到多张表,那么默认情况下会在所有表上加行共享锁,为了只在特定表上加行共享锁,需要在for update子句后带有of子句,of后面跟字段名,如果跟表名或游标名称,则会报错:标示符无效。示例如下:
declare cursor gData is select name,address,cip_temps.id from cip_temps,cip_t where cip_temps.id=cip_t.id for update of address; rs gData%rowtype; begin open gData; loop fetch gData into rs; exit when gData%notfound; if rs.id=1 then delete from cip_temps where current of gData; else update cip_temps set name='塞北的雪' where current of gData; end if; end loop; close gData; end;
declare cursor gData is select name,address,cip_temps.id from cip_temps,cip_t where cip_temps.id=cip_t.id for update of address; rs gData%rowtype; begin open gData; loop fetch gData into rs; exit when gData%notfound; if rs.id=1 then delete from cip_temps where current of gData; else update cip_temps set name='塞北的雪' where current of gData; end if; end loop; close gData; end;
4、使用nowait子句
使用for update语句对被作用于行加锁,如果其他会话已经在被作用于行上加锁,那么默认情况下当前会话要一直等待对方释放锁,通过在for update子句中指定 nowait语句,可以避免等待锁,当指定了nowait子句之后,如果其他会话已经在被作用行加锁,那么当前会话会显示错误提示信息,并退出PL/SQL,示例如下:
declare cursor gData is select name,address,cip_temps.id from cip_temps,cip_t where cip_temps.id=cip_t.id for update nowait; rs gData%rowtype; begin open gData; loop fetch gData into rs; exit when gData%notfound; if rs.id=1 then delete from cip_temps where current of gData; else update cip_temps set name='塞北的雪' where current of gData; end if; end loop; close gData; end;
declare cursor gData is select name,address,cip_temps.id from cip_temps,cip_t where cip_temps.id=cip_t.id for update nowait; rs gData%rowtype; begin open gData; loop fetch gData into rs; exit when gData%notfound; if rs.id=1 then delete from cip_temps where current of gData; else update cip_temps set name='塞北的雪' where current of gData; end if; end loop; close gData; end;
三、游标for循环
使用游标for循环是循环游标最简单的方法,oracle会隐含打开游标、循环提取数据、关闭游标,语法如下:
for record_name in cursor_name loop
..........
end loop;
如上所示:cursor_name是已经定义的游标名称,record_name是oracle隐含定义的记录变量。
1、使用游标for循环
当使用游标开发程序时,建议使用for循环,从而简化代码程序,示例如下:
declare cursor temp_cursor is select name,age,address,id from cip_temps; begin for emp_record in temp_cursor loop dbms_output.put_line(temp_cursor%rowcount||'第一行数据:'||emp_record.name||':'|| emp_record.age||':'|| emp_record.address||':'|| emp_record.id); end loop; end;
declare cursor temp_cursor is select name,age,address,id from cip_temps; begin for emp_record in temp_cursor loop dbms_output.put_line(temp_cursor%rowcount||'第一行数据:'||emp_record.name||':'|| emp_record.age||':'|| emp_record.address||':'|| emp_record.id); end loop; end;
2、在游标for循环时直接使用子查询
declare begin for emp_record in (select * from cip_temps) loop dbms_output.put_line('第一行数据:'||emp_record.name||':'|| emp_record.age||':'|| emp_record.address||':'|| emp_record.id); end loop; end;
发表评论
-
connect by prior
2012-01-29 14:41 747http://www.blogjava.net/freeman ... -
Oracle 解锁
2011-08-22 11:32 836在for update 查询时,线程被阻塞 查询阻塞线程: ... -
exists与in
2011-07-27 20:53 10131. exists: 不缓存exists() ... -
outer join , inner join , cross join
2010-11-30 13:18 888select * from table1; ID NAME 1 ... -
查看Oracle表空间 tablespace
2010-10-29 09:32 11421. 查看所有表空间大小 SQL> select ta ... -
Oracle--create user& tablespace
2010-10-29 09:22 2608-建立表空间(oracle中的tablespace(表空间)就 ... -
win7下安装Oracle10g
2010-10-03 01:01 1084解决方案: 步骤一:在解压出的oracle文件夹中搜 ... -
Oracle 关于密码及密码文件
2010-09-29 10:49 1618以安装Oracle的用户进入系统: 忘记密码: 1.在命令行下 ... -
修改Oracle端口
2010-09-02 19:20 1401<script>function StorePag ... -
关于Oracle 10g 默认用户、密码及登录问题
2010-09-02 19:02 1960Oracle 10g 默认用户、密码 参见http://sap ... -
Oracle 之 Sequence
2010-08-13 09:01 8241、Create Sequence 你首先要有CREATE ... -
存储过程中 调用 Java
2010-08-12 11:39 895一、如何创建java存储过程? 通常有三种方法来创建java存 ... -
Java 调用Oracle 存储过程
2010-08-12 10:45 16321、存储过程是指保存在 ... -
Java 调用Oracle 函数
2010-08-12 10:26 1545oracle的存储过程和函数区别 1、都可以使用out参数返 ... -
Merge Into
2010-08-12 10:22 1366用途 merge 命令可以用 ... -
Returnning Into 总结
2010-08-12 09:45 1096ORACLE的DML语句中可以指定RETURNING语句。使用 ... -
Pro * C 的使用(三)
2010-08-11 18:05 1108(7) 动态定义语句 SQL语句分动态定义语句和静态 ... -
Pro * C 的使用(二)
2010-08-11 18:02 13642.应用程序体 在Pro*C ... -
Pro * C 的使用(一)
2010-08-11 17:59 1177一 Pro*C 程序概述: ... -
ref cursor
2010-08-11 16:56 1029REF CURSOR 小结 利用REF CURSOR,可以在程 ...
相关推荐
在2016年1月20日,四川省旅游标准评定委员会对外发布了川旅标评委发〔2016〕4号文件,对外公布了对599家单位的乡村旅游特色业态经营点的认定结果。这一举动标志着该省乡村旅游发展的新里程,更是一次对乡村旅游业...
主要目标市场是城市居民,满足他们体验田园生活和回归朴素民俗的需求,形成了独特的"乡村休闲游"模式。 乡村旅游质量评价的主体主要是城市居民,评价要素包括田园风味的独特性、整体印象、乡村文化的领略、农庄生活...
### Oracle 游标使用详解 #### 一、游标简介 在Oracle数据库中,游标是一种重要的编程技术,主要用于处理查询结果集中的数据。通过游标,开发人员可以在程序中一行行地处理查询结果,而不仅仅是获取整个结果集。...
某旅行社要开发一个小型旅游管理子系统,主要涉及的基本实体及其基本信息如下: 旅游线路:线路编号、起点、终点、旅游天数、主要景点。 旅游班次:班次编号、出发日期、回程日期、旅游标准、报价、折扣率。...
一方面,旅游市场的规模不断扩大,国内游客数量逐年攀升,出境游也呈现出强劲的增长势头。另一方面,旅游产品和服务日益多元化,从传统的观光旅游到文化体验、生态旅游、乡村旅游等各类特色旅游形式应运而生。 然而...
本示例“ios-ScrollView实现游尺标功能.zip”着重讲解如何利用UIScrollView实现一个具有游标功能的界面,该功能允许用户既可以通过滑动浏览,也可以手动输入值来导航。下面将详细介绍如何实现这一功能。 首先,我们...
2020旅游风向标.pdf
标准体系的建立依据包括企业性质、目标、组织结构、相关法律法规以及国标、行标和地标的要求。体系通常由总则、基础标准体系、管理标准体系、服务标准体系和岗位工作标准体系构成。基础标准体系涉及标准化导则,包括...
服务设施标识则是提供给游客必要服务的指向标,包括售票处、游客中心等关键场所的指引。 在规划和设计导览标识系统时,需要从多个方面进行综合考虑。首先是目标设定,即通过标识系统的设计来树立高品质服务形象,...
中国在线旅游行业及对标品牌分析XXXX0407.pptx
手游弱网和性能测试是确保游戏在各种网络条件和设备环境下稳定运行的关键环节。下面将详细阐述这些领域的关键知识点。 1. **纯丢包网络模型**:在手游测试中,模拟真实世界的网络环境是非常重要的,这包括模拟网络...
- 方案评审不合格的将被废标。 3. 业务需求: - 内部业务:协同办公、即时通讯和在线会议。 - 旅游管理:在线业务办理、电子合同监管、质量监管、导游考试和培训。 - 为企业提供 IT 服务:存储、运维、安全、...
精品商业计划书2020-手游渠道评级标准.xlsx
4. **本地游与周边游兴起**:长途旅行受限,短途和本地旅游成为新的趋势,推动了乡村旅游和城市周边游的发展。 5. **健康安全成为首要考量**:旅行者对目的地的卫生条件和安全措施的关注度空前提高,影响着旅游目的...
【标题】"行业洞察-2020旅游风向标" 涵盖了2020年全球旅游业的发展趋势、挑战与机遇。这一主题旨在分析在这一年中,旅游业受到的各种影响,包括政策变化、经济环境、消费者行为、技术创新等因素,并对未来的发展方向...
页游手游评级标准参考,可用于游戏行业各渠道商接入标准
能力目标方面,课程要求学生能够运用所学知识进行实践,如规划景区的服务设施、基础设施、游线,进行景区形象策划,分析规划内容并评估景区项目的经济效益。学生还应具备良好的社会能力,包括参与编制景区规划文本和...