Oracle学习手册:Oracle游标使用大全一
来源:优易学  2011-2-15 15:21:06   【优易学:中国教育考试门户网】   资料下载   IT书店

 使用游标
  
  这里要做一个声明,我们所说的游标通常是指显式游标,因此从现在起没有特别指明的情况,我们所说的游标都是指显式游标。要在程序中使用游标,必须首先声明游标。
  
  声明游标
  
  语法:
  
  CURSOR cursor_name IS select_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

上一页  [1] [2] 

责任编辑:虫虫

文章搜索:
 相关文章
热点资讯
热门课程培训