| 网站首页 | 资讯 | Hack | 漏洞 | 网管 | 编程 | 培训 | 品黑页 | 软件 | 论坛 | 动画 | 视频 | 经典 | 教学站 | 黑客点睛 | 
服务导航 我要发布 主力频道 空间域名 精华收集 服务器出租 黑客培训 光盘刻录 特色服务 解决方案 我要投诉
您现在的位置: 华夏黑客同盟 >> 培训 >> 认证考核 >> Oracle认证 >> 正文 用户登录 新用户注册
Oracle游标使用大全二           ★★★ 【字体:
Oracle学习手册:Oracle游标使用大全二
作者:佚名 文章来源:本站原创 点击数: 更新时间:2008-8-5

 

 可以简单的把这一类代码称为游标用于循环。但还有一种循环与这种类型不相同,这就是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中的子查询没有什么区别。
  
  游标中的更新和删除
  
  在PL/SQL中依然可以使用UPDATE和DELETE语句更新或删除数据行。显式游标只有在需要获得多行数据的情况下使用。PL/SQL提供了仅仅使用游标就可以执行删除或更新记录的方法。
  
  UPDATE或DELETE语句中的WHERE CURRENT OF子串专门处理要执行UPDATE或DELETE操作的表中取出的最近的数据。要使用这个方法,在声明游标时必须使用FOR UPDATE子串,当对话使用FOR UPDATE子串打开一个游标时,所有返回集中的数据行都将处于行级(ROW-LEVEL)独占式锁定,其他对象只能查询这些数据行,不能进行UPDATE、DELETE或SELECT...FOR UPDATE操作。
  
  语法:
  
  FOR UPDATE [OF [schema.]table.column[,[schema.]table.column]..
  
  [nowait]
  
  在多表查询中,使用OF子句来锁定特定的表,如果忽略了OF子句,那么所有表中选择的数据行都将被锁定。如果这些数据行已经被其他会话锁定,那么正常情况下ORACLE将等待,直到数据行解锁。
  
  在UPDATE和DELETE中使用WHERE CURRENT OF子串的语法如下:
  
  WHERE{CURRENT OF cursor_name|search_condition}
  
  例:
  
  DELCARE
  
  CURSOR c1 IS SELECT empno,salary
  
  FROM emp
  
  WHERE comm IS NULL
  
  FOR UPDATE OF comm;
  
  v_comm NUMBER(10,2);
  
  BEGIN
  
  FOR r1 IN c1 LOOP
  
  IF r1.salary<500 THEN
  
  v_comm:=r1.salary*0.25;
  
  ELSEIF r1.salary<1000 THEN
  
  v_comm:=r1.salary*0.20;
  
  ELSEIF r1.salary<3000 THEN
  
  v_comm:=r1.salary*0.15;
  
  ELSE
  
  v_comm:=r1.salary*0.12;
  
  END IF;
  
  UPDATE emp;
  
  SET comm=v_comm
  
  WHERE CURRENT OF c1l;
  
  END LOOP;
  
  END

上一页  [1] [2] 

责任编辑:章新艳  联系方式  Email:章新艳
电话:51228163
  • 上一篇培训:

  • 下一篇培训:
  • (只显示最新5条。评论内容只代表网友观点,与本站立场无关!)
    姓 名:
    * 游客填写  ·注册用户
    主 页:
    评 分:
    1分 2分 3分 4分 5分
    评论内容:
    验证码: *
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  • 最新hack更新
    最新推荐资讯
    相关培训
    Oracle10g数据库的创建
    ORACLE常见问题诊断方法
    优化调整Oracle8i数据库系统
    将Oracle汉字转换为拼音
    Ruby脚本调用Oracle存储
    linux学习与用命令详解
    Oracle的经验技巧集锦
    介绍了Oracle常用数据字典
    Oracle游标使用大全一
    Oracle DBA数据库试题精选
    最新会员软件
    最新推荐视频
    最新推荐动画

    Copyright @ 2005 77169.Net Inc. All rights reserved. 华夏黑客同盟 版权所有
    北京市电信通提供网络带宽

    mailto:webmaster@77169.net
    咨询QQ号:836982 / 59280880
    联系站长 QQ38588913
    热线电话: 86-10-67634029/676229433
    京ICP证041431号