快速掌握Oracle数据库游标的使用方法

文章作者 100test 发表时间 2007:06:26 12:39:00
来源 100Test.Com百考试题网


显式游标

当查询返回结果超过一行时,就需要一个显式游标,此时用户不能使用0select into语句。PL/SQL管理隐式游标,当查询开始时隐式游标打开,查询结束时隐式游标自动关闭。显式游标在PL/SQL块的声明部分声明,在执行部分或异常处理部分打开,取出数据,关闭。

使用游标

这里要做一个声明,我们所说的游标通常是指显式游标,因此从现在起没有特别指明的情况,我们所说的游标都是指显式游标。要在程序中使用游标,必须首先声明游标。

声明游标

语法:


CURSOR cursor_name IS 0select_statement.

在PL/SQL中游标名是一个未声明变量,不能给游标名赋值或用于表达式中。

例:

DELCARE 

CURSOR C_EMP IS SELECT empno,ename,salary 

FROM emp 

WHERE salary>2000 

ORDER BY ename. 

........ 

      BEGIN

在游标定义中SELECT语句中不一定非要表可以是视图,也可以从多个表或视图中选择的列,甚至可以使用*来选择所有的列 。

打开游标

使用游标中的值之前应该首先打开游标,打开游标初始化查询处理。打开游标的语法是:

OPEN cursor_name

cursor_name是在声明部分定义的游标名。

例:

OPEN C_EMP. 关闭游标。

语法:

CLOSE cursor_name

例:

CLOSE C_EMP. 从游标提取数据。从游标得到一行数据使用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


src="/oracle/js/wxgg_oracle.js">


相关文章


Oracle动态SQL返回单条结果和结果集
oracle中对db的不同命名方式
快速掌握Oracle数据库游标的使用方法
如何连接Oracle及故障解决办法总结
与数据库无关的处理放到数据库以外来实现
简析Oracle数据库最大可用性体系结构
使用一条SQL语句删除表中重复记录
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛