打印本文 打印本文 关闭窗口 关闭窗口
Oracle 游标使用大全
作者:武汉SEO闵涛  文章来源:敏韬网  点击数4189  更新时间:2009/4/22 22:03:41  文章录入:mintao  责任编辑:mintao
bsp;  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 

 

记录变量 

    定义一个记录变量使用TYPE命令和%ROWTYPE,关于%ROWsTYPE的更多信息请参阅相关资料。 

    记录变量用于从游标中提取数据行,当游标选择很多列的时候,那么使用记录比为每列声明一个变量要方便得多。 

    当在表上使用%ROWTYPE并将从游标中取出的值放入记录中时,如果要选择表中所有列,那么在SELECT子句中使用*比将所有列名列出来要安全得多。 

 

例: 

SET SERVERIUTPUT ON 

DECLARE 

R_emp EMP%ROWTYPE; 

CURSOR c_emp IS SELECT * FROM emp; 

BEGIN 

  OPEN c_emp; 

上一页  [1] [2] [3] [4] [5] [6]  下一页

打印本文 打印本文 关闭窗口 关闭窗口