- 浏览: 233958 次
- 性别:
- 来自: 广东
文章分类
最新评论
-
wangmuchang:
解压需要密码
CAS单点登录之测试应用 -
ayang722:
首先就要在运行报表birt的IEngineTask中加入, J ...
birt配置动态数据源 -
lihong11:
very good!
js常用方法 -
qtlkw:
你共享出来为什么要密码?要密码为何要共享出来?汗
CAS单点登录之测试应用 -
lishouxinghome:
请问如何获得用户的Id呢,往指点
使用 CAS 在 Tomcat 中实现单点登录
一、参数游标
参数游标是带有参数的游标,在定义参数游标之后,当使用不同参数值多次打开游标时,可以产生不同的结果集,语法如下:
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;
转载于http://shawnfree.iteye.com/blog/362128
发表评论
-
Oracle 连接故障的排查
2014-04-10 16:33 729Oracle 连接故障的排查 1、 故障现象 通 ... -
系统共享内存的修改(ORA-27102: out of memory)
2014-04-10 16:24 776今天做压力测试的时候,修改数据参数出现ORA-27102: ... -
Oracle的AWR报告分析
2014-04-10 16:23 650今晚来分析一下awr报告,首先说一下什么是awr报告,它能给 ... -
oracle 10g Enterprise Manager 无法连接到数据库实例分析
2014-03-27 17:40 9701 问题描述客户端通过IE 浏览器登陆oracle 10g ... -
linux Oracle服务启动&停止脚本与开机自启动
2014-03-27 17:39 1000在CentOS 6.3下安装完Oracl ... -
plsql设置
2012-12-25 17:54 8411.设置date类型显示格式 TOOLS(工具)——> ... -
Oracle date timestamp 时间函数总结
2012-12-21 11:30 1122yyyy-mm-dd hh24:mi:ss.ff 年-月-日 ... -
oracle异常收集
2012-12-21 11:14 8321. ORA-12516: TNS: 监听程序找不到符合协议 ... -
oracle基础sql语句二
2012-12-21 10:03 685linux 切换oracel用户: su oracle ... -
修改oracle数据库的字符集
2012-12-21 09:58 1015SHUTDOWN IMMEDIATE;STARTUP MOUN ... -
Oracle对象类型详解
2012-03-26 14:38 1305一、抽象数据类型1、创建类型--地址类型CREATE O ... -
oracle数组类型简单实例介绍
2012-03-26 10:49 1116Oracle数组一般可以分为固定数组和可变数组 固定数组 ... -
oracle问题收集一
2011-08-30 15:37 12441.dblink创建语法 --删除dblink dr ... -
Oracle自治事务pragma autonomous_transaction的介绍
2011-08-05 15:20 1604transaction has no link to the ... -
oracle中用START WITH...CONNECT BY PRIOR子句实现递归查询
2011-08-05 15:03 956今天发现在oracle中的sele ... -
oracle树中prior的用法
2011-08-05 15:02 1775在oracle生成树时,prior ... -
事务中的Savepoints
2011-07-29 09:59 774事务中的Savepoints 你可以在事务上下文中声明称为sa ... -
PLSQL(语法--异常处理--游标--存储过程--触发器--oracle分页)
2011-07-08 17:00 1299《PL/SQL编程》 ... -
用pl/sql developer导出表结构和数据
2011-06-24 11:45 1298点击Tools--Export User Objects 这 ... -
Oracle学习笔记一:体系结构
2011-06-24 11:40 747http://blog.csdn.net/chenmo_zha ...
相关推荐
- 在这里定义了一个名为`c_employees`的游标,其中`:dept_id`是参数。 ##### 3. 打开游标 ```sql OPEN c_employees USING 100; -- 假设部门ID为100 ``` ##### 4. 提取数据 ```sql DECLARE v_employee employees%...
Oracle数据库中的游标是PL/SQL编程中一种重要的控制结构,它允许程序逐行处理查询结果,而不是一次性处理所有结果。游标对于处理大量数据或需要根据每行数据执行不同操作的情况非常有用。以下是关于Oracle游标使用的...
Oracle 游标概述 Oracle 游标是 Oracle 数据库中的一种重要概念,用于查询数据库,获取记录集合(结果集)的指针。游标可以看作是一个临时表,你可以对其每一行的数据进行任意的操作。本文将对 Oracle 游标的概念、...
Oracle数据库中,游标是处理单条记录的重要工具,尤其在需要逐行处理查询结果集时。游标允许程序员在结果集中前进、后退,并访问每一行的数据。本篇文章主要探讨Oracle数据库中游标的使用。 首先,游标分为两种类型...
Oracle游标是数据库编程中非常重要的一个概念,主要用于处理SQL查询的结果集。游标允许我们按需逐行处理数据,而不是一次性加载所有结果。这里详细介绍了Oracle中的三种游标类型:隐式游标、显式游标和REF游标。 1....
Oracle数据库是世界上最流行的数据库管理系统之一,它提供了丰富的功能来处理数据,包括函数、游标和触发器。在本文中,我们将深入探讨这些概念,并通过一些实际的例子来理解它们的用法。 1. **Oracle函数**:函数...
Oracle数据库有几个与游标相关的初始化参数: 1. `OPEN_CURSORS`:这个参数定义了每个用户可以同时打开的最大游标数。当达到此限制时,会抛出`ORA-01000`错误。默认值可能因环境而异,但通常较小,如800。如果频繁...
- 游标可以作为参数传递,或者作为存储过程的输出结果。 9. **游标处理异常** - 应适当地处理游标相关的异常,例如NO_DATA_FOUND和TOO_MANY_ROWS。 10. **游标最佳实践** - 及时关闭游标以释放系统资源。 - ...
### Oracle游标优化 在Oracle数据库管理中,游标是一种重要的机制,用于处理查询结果集。游标可以被看作是存储查询结果的一种临时区域,它允许用户通过循环逐行处理这些结果。游标不仅可以提高应用程序的灵活性,还...
### Oracle游标使用及实例详解 #### 一、Oracle游标概述 在Oracle数据库中,游标(Cursor)是一种用于处理SQL查询结果集的方式。它允许用户逐行地读取和处理查询结果,这对于需要对每一行数据进行特定操作的情况非常...
游标类型参数是 Oracle 存储过程中的一种特殊参数类型。游标类型参数可以实现数据的批量处理。在本示例中,我们使用游标类型参数来实现数据的批量处理。 五、示例代码解释 首先,我们创建了一个名为 test 的存储...
在示例代码中,`DECLARE`语句定义了一个名为`emp_cur`的游标,它接受一个参数`p_deptid`,然后通过`SELECT`语句获取`employees`表中`department_id`为`p_deptid`的所有列。`FETCH`语句将游标当前行的数据存储在变量`...
Oracle 数据库游标、存储过程和触发器 Oracle 数据库是一种关系型数据库管理系统,它提供了多种机制来提高数据库的性能和安全性。在本文中,我们将讨论 Oracle 数据库中的三个重要概念:游标、存储过程和触发器。 ...
在Oracle数据库中,游标(Cursor)是一种非常重要的概念,特别是在编写存储过程和函数时。游标允许我们处理单行或多行数据集,一次处理一行,这样可以进行精细化的数据操作。在本篇讨论中,我们将深入理解Oracle游标...
Oracle游标是数据库管理系统中的一种重要机制,它允许程序员逐行处理查询结果集,而不仅仅是一次性获取所有数据。游标类似于C语言中的指针,能够灵活、高效地处理多条记录,尤其在需要循环处理或者根据当前行数据做...
通过`registerOutParameter`方法注册这个参数,类型设置为`OracleTypes.CURSOR`,因为我们要接收的是Oracle的游标。执行`cs.execute()`后,我们可以从`cs.getObject(1)`获取到游标对象,将其转换为`ResultSet`,然后...
根据提供的文件信息,我们可以归纳出以下Oracle游标的使用方法及相关知识点: ### 一、游标的基本概念 在Oracle数据库中,游标是一种重要的机制,它允许用户从查询结果集中逐行检索数据。游标可以分为两种类型:**...
### Oracle存储过程、游标、函数的详解 #### 一、概述 在Oracle数据库中,存储过程、游标和函数是非常重要的组成部分,它们为数据库管理提供了强大的编程能力。通过学习这些概念,我们可以更加灵活地管理和操作...
本篇文章将深入探讨如何使用Java调用Oracle存储过程,并通过游标获取存储过程中返回的临时表数据。 首先,Oracle存储过程是一种在数据库端执行的预编译SQL语句和PL/SQL代码集合。它可以接收参数、执行业务逻辑并...