- 浏览: 264245 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
cannysqurrel:
http://wizkm.com/wizkm/invite/4 ...
缺一个整理日常翻阅资料的工具 -
54sunboy:
这些资料我都是用evernote收集和归类的。电子书或文档暂时 ...
缺一个整理日常翻阅资料的工具 -
tuo_bing:
请问 ,如果 Tomcat的配置为 : <Cont ...
tomcat 发布多个项目时抛的webAppRootKey错误 -
syzxf1996:
thank you ,想收藏,没有成功,只能留言了。希望下回还 ...
display tag中去除不需要的参数 -
Alanのjava:
谢谢!楼主
javascript视频教程下载
从游标提取数据 从游标得到一行数据使用FETCH命令。每一次提取数据后,游标都指向结果集的下一行。语法如下: FETCH cursor_name INTO variable[,variable,...] 对于SELECT定义的游标的每一列,FETCH变量列表都应该有一个变量与之相对应,变量的类型也要相同。
例: SET SERVERIUTPUT ON DECLARE v_ename EMP.ENAME%TYPE; v_salary EMP.SALARY%TYPE; CURSOR c_emp IS SELECT ename,salary FROM emp; BEGIN OPEN c_emp; FETCH c_emp INTO v_ename,v_salary; DBMS_OUTPUT.PUT_LINE('Salary of Employee'|| v_ename ||'is'|| v_salary); FETCH c_emp INTO v_ename,v_salary; DBMS_OUTPUT.PUT_LINE('Salary of Employee'|| v_ename ||'is'|| v_salary); FETCH c_emp INTO v_ename,v_salary; DBMS_OUTPUT.PUT_LINE('Salary of Employee'|| v_ename ||'is'|| v_salary); CLOSE c_emp; END 这段代码无疑是非常麻烦的,如果有多行返回结果,可以使用循环并用游标属性为结束循环的条件,以这种方式提取数据,程序的可读性和简洁性都大为提高,下面我们使用循环重新写上面的程序: SET SERVERIUTPUT ON DECLARE v_ename EMP.ENAME%TYPE; v_salary EMP.SALARY%TYPE; CURSOR c_emp IS SELECT ename,salary FROM emp; BEGIN OPEN c_emp; LOOP FETCH c_emp INTO v_ename,v_salary; EXIT WHEN c_emp%NOTFOUND; DBMS_OUTPUT.PUT_LINE('Salary of Employee'|| v_ename ||'is'|| v_salary); END 记录变量 定义一个记录变量使用TYPE命令和%ROWTYPE,关于%ROWsTYPE的更多信息请参阅相关资料。 记录变量用于从游标中提取数据行,当游标选择很多列的时候,那么使用记录比为每列声明一个变量要方便得多。 当在表上使用%ROWTYPE并将从游标中取出的值放入记录中时,如果要选择表中所有列,那么在SELECT子句中使用*比将所有列名列出来要得多。
例: SET SERVERIUTPUT ON DECLARE R_emp EMP%ROWTYPE; CURSOR c_emp IS SELECT * FROM emp; BEGIN OPEN c_emp; LOOP FETCH c_emp INTO r_emp; EXIT WHEN c_emp%NOTFOUND; DBMS_OUT.PUT.PUT_LINE('Salary of Employee'||r_emp.ename||'is'|| r_emp.salary); END LOOP; CLOSE c_emp; END;
%ROWTYPE也可以用游标名来定义,这样的话就必须要首先声明游标:
SET SERVERIUTPUT ON DECLARE CURSOR c_emp IS SELECT ename,salary FROM emp; R_emp c_emp%ROWTYPE; BEGIN OPEN c_emp; LOOP FETCH c_emp INTO r_emp; EXIT WHEN c_emp%NOTFOUND; DBMS_OUT.PUT.PUT_LINE('Salary of Employee'||r_emp.ename||'is'|| r_emp.salary); END LOOP; CLOSE c_emp; END; 带参数的游标 与存储过程和函数相似,可以将参数传递给游标并在查询中使用。这对于处理在某种条件下打开游标的情况非常有用。它的语法如下:
CURSOR cursor_name[(parameter[,parameter],...)] IS select_statement;
定义参数的语法如下: Parameter_name [IN] data_type[{:=|DEFAULT} value]
与存储过程不同的是,游标只能接受传递的值,而不能返回值。参数只定义数据类型,没有大小。 另外可以给参数设定一个缺省值,当没有参数值传递给游标时,就使用缺省值。游标中定义的参数只是一个占位符,在别处引用该参数不一定可靠。
在打开游标时给参数赋值,语法如下:
OPEN cursor_name[value[,value]....]; 参数值可以是文字或变量。
例: DECALRE CURSOR c_dept IS SELECT * FROM dept ORDER BY deptno; CURSOR c_emp (p_dept VARACHAR2) IS SELECT ename,salary FROM emp WHERE deptno=p_dept ORDER BY ename r_dept DEPT%ROWTYPE; v_ename EMP.ENAME%TYPE; v_salary EMP.SALARY%TYPE; v_tot_salary EMP.SALARY%TYPE; BEGIN OPEN c_dept; LOOP FETCH c_dept INTO r_dept; EXIT WHEN c_dept%NOTFOUND; DBMS_OUTPUT.PUT_LINE('Department:'|| r_dept.deptno||'-'||r_dept.dname); v_tot_salary:=0; OPEN c_emp(r_dept.deptno); LOOP FETCH c_emp INTO v_ename,v_salary; EXIT WHEN c_emp%NOTFOUND; DBMS_OUTPUT.PUT_LINE('Name:'|| v_ename||' salary:'||v_salary); v_tot_salary:=v_tot_salary+v_salary; END LOOP; CLOSE c_emp; DBMS_OUTPUT.PUT_LINE('Toltal Salary for dept:'|| v_tot_salary); END LOOP; CLOSE c_dept; END; 游标FOR循环 在大多数时候我们在设计程序的时候都遵循下面的步骤: 1、打开游标 2、开始循环 3、从游标中取值 那一行被返回 5、处理 6、关闭循环 7、关闭游标 可以简单的把这一类代码称为游标用于循环。但还有一种循环与这种类型不相同,这就是FOR循环,用于FOR循环的游标按照正常的声明方式声明,它的优点在于不需要显式的打开、关闭、取数据,测试数据的存在、定义存放数据的变量等等。游标FOR循环的语法如下:
FOR record_name IN (corsor_name[(parameter[,parameter]...)] | (query_difinition) LOOP statements END LOOP;
下面我们用for循环重写上面的例子: DECALRE CURSOR c_dept IS SELECT deptno,dname FROM dept ORDER BY deptno; CURSOR c_emp (p_dept VARACHAR2) IS SELECT ename,salary FROM emp WHERE deptno=p_dept ORDER BY ename v_tot_salary EMP.SALARY%TYPE; BEGIN FOR r_dept IN c_dept LOOP DBMS_OUTPUT.PUT_LINE('Department:'|| r_dept.deptno||'-'||r_dept.dname); v_tot_salary:=0; FOR r_emp IN c_emp(r_dept.deptno) LOOP DBMS_OUTPUT.PUT_LINE('Name:' || v_ename || 'salary:' || v_salary); v_tot_salary:=v_tot_salary+v_salary; END LOOP; DBMS_OUTPUT.PUT_LINE('Toltal Salary for dept:'|| v_tot_salary); END LOOP; END; 在游标FOR循环中使用查询 在游标FOR循环中可以定义查询,由于没有显式声明所以游标没有名字,记录名通过游标查询来定义。 DECALRE v_tot_salary EMP.SALARY%TYPE; BEGIN FOR r_dept IN (SELECT deptno,dname FROM dept ORDER BY deptno) LOOP DBMS_OUTPUT.PUT_LINE('Department:'|| r_dept.deptno||'-'||r_dept.dname); v_tot_salary:=0; FOR r_emp IN (SELECT ename,salary FROM emp WHERE deptno=p_dept ORDER BY ename) LOOP DBMS_OUTPUT.PUT_LINE('Name:'|| v_ename||' salary:'||v_salary); v_tot_salary:=v_tot_salary+v_salary; END LOOP; DBMS_OUTPUT.PUT_LINE('Toltal Salary for dept:'|| v_tot_salary); END LOOP; END;
游标中的子查询 语法如下: CURSOR C1 IS SELECT * FROM emp WHERE deptno NOT IN (SELECT deptno FROM dept WHERE dname!='ACCOUNTING'); 可以看出与SQL中的子查询没有什么区别。
发表评论
-
OracleDBConsole[SID]服务启动报错
2010-06-29 00:36 1798OracleDBConsole[SID]服务简介 Orac ... -
oralce Connect by
2010-05-07 12:33 1278--connect by 使用详解/*START WITH 表 ... -
Oracle的日期函数
2009-11-17 17:45 737相信很多人都有过统计某些数据的经历,比如,要统计财务的情况,可 ... -
Oracle to_date方法
2009-08-11 18:44 1596日期格式参数 含义说明 D 一周中的星期几 DAY 天的名字, ... -
Oracle中TO_DATE格式
2009-06-12 10:22 948TO_DATE格式(以时间:2007-11-02 ... -
Oracle 触发器语法
2009-04-09 11:25 1835一 Oracle触发器语法 ... -
SQL语句按时间查询
2009-03-18 10:21 2727以前没太注意SQL语句中按时间条件查询,结果写了个SQL查询报 ... -
ORA-01008: not all variables bound
2009-03-12 09:52 5052ORA-01008: not all variables bo ... -
PowerDesign高级应用
2009-02-26 11:22 874PowerDesign高级应用 1、去掉Oracle生成 ... -
powerDesign
2009-02-26 11:16 982PowerDesigner系列产品提供了一个完整的建模解决方案 ... -
深入浅出oracle锁原理篇
2008-11-14 12:38 1437在现代的多用户多任务系统中,必然会出现多个用户同时访问共享的某 ... -
在ORACLE中实现Select TOP N
2008-10-23 09:59 1213在ORACLE中实现Select TOP N ... -
clob和blob两个字段的区别
2008-10-22 15:33 3552转载自:http://www.bokebb.com/dev/c ... -
SQL截取字符串
2008-10-21 11:05 2568SUBSTRING 返回字符、binary、text ... -
数据库字符串拼接
2008-10-21 10:37 1629表wf_oasheetmain中有一字段file_code 某 ... -
sql日期的详细解释
2008-05-15 10:00 1009Select /* * 输出格式: x年x周 * 如:2 ... -
sql语句中的日期处理
2008-05-15 09:07 2733一.日期處理函數 1.日期 ... -
JDBC driver连接SQL Server 2000数据库
2007-12-15 22:28 3146(这是我在网上找的一篇,希望能对需要的人有所帮助) 连接前我 ...
相关推荐
ORACLE 游标使用示例,给大家可以共享一下。
Oracle游标使用大全 适合初学者,非常不错.PDF
Oracle游标使用方法及语法大全
oracle游标使用大全,详细描述了如何使用游标,创建游标等等
Oracle游标使用方法及语法大全.doc
oracle游标使用大全,其中有很多例子,有助于大家理解,希望对初学者有帮助
Oracle入门--Oracle游标使用! 值得下载看看!资源免费,大家分享!!
Oracle 游标使用大全
Oracle 游标使用大全.txt Oracle 游标使用大全.txt
详细的oracle游标用法,简单易懂,是学习游标的好材料
Oracle游标使用
详细介绍了 oracle的游标使用 及 实例
Oracle 游标使用大全 游标的定义使用 比较全的资料哦