Chinaunix首页 | 论坛 | 博客

acc

  • 博客访问: 811275
  • 博文数量: 170
  • 博客积分: 7011
  • 博客等级: 少将
  • 技术积分: 1660
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-31 12:02
文章分类

全部博文(170)

文章存档

2014年(7)

2010年(2)

2009年(62)

2008年(25)

2007年(67)

2006年(7)

我的朋友

分类: Oracle

2014-06-02 17:34:58

Oralce Loop循环实例:

点击(此处)折叠或打开

  1. CREATE OR REPLACE PACKAGE BODY acc_loop_pkg IS

  2.   PROCEDURE loop_example_p IS
  3.     v_idx NUMBER := 1;
  4.   
  5.     --LOOP循环实例6:CURSOR结果循环
  6.     v_salary emp.sal%TYPE;
  7.     v_emp emp%ROWTYPE;
  8.     CURSOR v_cursor IS
  9.       SELECT * FROM emp WHERE sal > v_salary;
  10.   
  11.     --LOOP循环实例8:输出数组循环
  12.     TYPE array_type IS VARRAY(4) OF VARCHAR2(10);
  13.     v_arr array_type := array_type('A', 'B', 'C', 'D');
  14.   BEGIN
  15.   
  16.     dbms_output.put_line('Loop循环实例1:正序循环');
  17.     --reverse 正序循环
  18.     FOR i IN 1 .. 5 LOOP
  19.       dbms_output.put_line('i=' || i);
  20.     END LOOP;
  21.   
  22.     dbms_output.put_line('Loop循环实例2:倒序循环');
  23.     --reverse 可控制倒序循环
  24.     FOR i IN REVERSE 1 .. 5 LOOP
  25.       dbms_output.put_line('i=' || i);
  26.     END LOOP;
  27.   
  28.     dbms_output.put_line('Loop循环实例3:WHILE循环');
  29.     --使用WHILE进行循环
  30.     WHILE v_idx != 5 LOOP
  31.       dbms_output.put_line('v_idx=' || v_idx);
  32.       v_idx := v_idx + 1;
  33.     END LOOP;
  34.   
  35.     dbms_output.put_line('Loop循环实例4:EXIT WHEN循环');
  36.     --使用EXIT WHEN 退出循环
  37.     v_idx := 1;
  38.     LOOP
  39.       EXIT WHEN v_idx = 5;
  40.       dbms_output.put_line('v_idx=' || v_idx);
  41.       v_idx := v_idx + 1;
  42.     END LOOP;
  43.   
  44.     dbms_output.put_line('Loop循环实例5:SELECT结果循环');
  45.     --对SELECT结果进行循环输出
  46.     v_idx := 1;
  47.     FOR i IN (SELECT job, COUNT(1) cnt FROM emp GROUP BY job) LOOP
  48.       dbms_output.put_line(v_idx || ' > ' || i.job || ':' || i.cnt);
  49.       v_idx := v_idx + 1;
  50.     END LOOP;
  51.   
  52.     dbms_output.put_line('LOOP循环实例6:CURSOR结果循环');
  53.     --对游标CURSOR结果进行循环输出
  54.     v_salary := 2000;
  55.     IF v_cursor%ISOPEN = FALSE THEN
  56.       OPEN v_cursor;
  57.     END IF;
  58.     LOOP
  59.       FETCH v_cursor
  60.         INTO v_emp;
  61.       EXIT WHEN v_cursor%NOTFOUND;
  62.       dbms_output.put_line('EmpNO:' || v_emp.empno || ',' || 'Name:' || v_emp.ename || ',' || 'Salary:' || v_emp.sal);
  63.     END LOOP;
  64.   
  65.     dbms_output.put_line('LOOP循环实例7:GOTO跳转循环');
  66.     --使用GOTO跳转循环位置
  67.     v_idx := 5;
  68.     <<loop_7>>
  69.     v_idx := v_idx - 1;
  70.     dbms_output.put_line('v_idx=' || v_idx);
  71.     IF v_idx > 0 THEN
  72.       GOTO loop_7;
  73.     END IF;
  74.   
  75.     dbms_output.put_line('LOOP循环实例8:输出数组循环');
  76.     FOR i IN 1 .. v_arr.count LOOP
  77.       dbms_output.put_line(i || ':' || v_arr(i));
  78.     END LOOP;
  79.   
  80.   END loop_example_p;

  81. END acc_loop_pkg;
运行结果:


点击(此处)折叠或打开

  1. Loop循环实例1:正序循环
  2. i=1
  3. i=2
  4. i=3
  5. i=4
  6. i=5
  7. Loop循环实例2:倒序循环
  8. i=5
  9. i=4
  10. i=3
  11. i=2
  12. i=1
  13. Loop循环实例3:WHILE循环
  14. v_idx=1
  15. v_idx=2
  16. v_idx=3
  17. v_idx=4
  18. Loop循环实例4:EXIT WHEN循环
  19. v_idx=1
  20. v_idx=2
  21. v_idx=3
  22. v_idx=4
  23. Loop循环实例5:SELECT结果循环
  24. 1 > CLERK:4
  25. 2 > SALESMAN:4
  26. 3 > PRESIDENT:1
  27. 4 > MANAGER:3
  28. 5 > ANALYST:2
  29. LOOP循环实例6:CURSOR结果循环
  30. EmpNO:7566,Name:JONES,Salary:2975
  31. EmpNO:7698,Name:BLAKE,Salary:2850
  32. EmpNO:7782,Name:CLARK,Salary:2450
  33. EmpNO:7788,Name:SCOTT,Salary:3000
  34. EmpNO:7839,Name:KING,Salary:5000
  35. EmpNO:7902,Name:FORD,Salary:3000
  36. LOOP循环实例7:GOTO跳转循环
  37. v_idx=4
  38. v_idx=3
  39. v_idx=2
  40. v_idx=1
  41. v_idx=0
  42. LOOP循环实例8:输出数组循环
  43. 1:A
  44. 2:B
  45. 3:C
  46. 4:D

阅读(1054) | 评论(0) | 转发(0) |
0

上一篇:Oracle 11gR2数组实例:一维,二维,可变数组

下一篇:没有了

给主人留下些什么吧!~~