OracleÓαêʹÓ÷½·¨¼°Óï·¨´óÈ« ÏÂÔØ±¾ÎÄ

6. v_dname varchar2(15);

7. v_manager varchar2(15); 8. CURSOR list_cursor IS

9. SELECT deptno,count(*),sum(sal) FROM emp group by deptno; 10. BEGIN

11. OPEN list_cursor;

12. DBMS_OUTPUT.PUT_LINE('----------- ²¿ Êͳ ¼Æ ±í -----------'); 13. DBMS_OUTPUT.PUT_LINE('²¿ÃÅÃû³Æ ×ÜÈËÊý ×ܹ¤×Ê ²¿Ãž­Àí'); 14. FETCH list_cursor INTO v_deptno,v_count,v_sumsal; 15. WHILE list_cursor%found LOOP 16. SELECT dname INTO v_dname FROM dept 17. WHERE deptno=v_deptno;

18. SELECT ename INTO v_manager FROM emp 19. WHERE deptno=v_deptno and job='MANAGER';

20. DBMS_OUTPUT.PUT_LINE(rpad(v_dname,13)||rpad(to_char(v_count),8) 21. ||rpad(to_char(v_sumsal),9)||v_manager);

22. FETCH list_cursor INTO v_deptno,v_count,v_sumsal; 23. END LOOP;

24. DBMS_OUTPUT.PUT_LINE('--------------------------------------');

25. CLOSE list_cursor; 26. END;

Êä³ö½á¹ûΪ£º Sql´úÂë

1. -------------------- ²¿ Êͳ ¼Æ ±í ----------------- 2. ²¿ÃÅÃû³Æ ×ÜÈËÊý ×ܹ¤×Ê ²¿Ãž­Àí 3. ACCOUNTING 3 8750 CLARK 4. 5. 6. 7.

RESEARCH 5 10875 JONES

SALES 6 9400 BLAKE

------------------------------------------------------------- PL/SQL ¹ý³ÌÒѳɹ¦Íê³É¡£

˵Ã÷£ºÓαêÖÐʹÓõ½ÁËÆð·Ö×鹦ÄܵÄSELECTÓï¾ä£¬Í³¼Æ³ö¸÷²¿ÃŵÄ×ÜÈËÊýºÍ×ܹ¤×Ê¡£ÔÙ¸ù¾Ý²¿ÃűàºÅºÍÖ°ÎñÕÒµ½²¿Ãŵľ­Àí¡£¸Ã³ÌÐò¼Ù¶¨Ã¿¸ö²¿ÃÅÓÐÒ»¸ö¾­Àí¡£

¡¾ÑµÁ·5¡¿ Ϊ¹ÍÔ±Ôö¼Ó¹¤×Ê£¬´Ó¹¤×ʵ͵ĹÍÔ±¿ªÊ¼£¬ÎªÃ¿¸öÈËÔö¼ÓÔ­¹¤×ʵÄ10%£¬ÏÞ¶¨ËùÔö¼ÓµÄ¹¤×Ê×ܶîΪ800Ôª£¬ÏÔʾÔö¼Ó¹¤×ʵÄÈËÊýºÍÓà¶î¡£ ÊäÈë²¢µ÷ÊÔÒÔϳÌÐò£º Sql´úÂë

1. SET SERVEROUTPUT ON 2. DECLARE

3. V_NAME CHAR(10); 4. 5. 6. 7.

V_EMPNO NUMBER(5); V_SAL NUMBER(8); V_SAL1 NUMBER(8);

V_TOTAL NUMBER(8) := 800; --Ôö¼Ó¹¤×ʵÄ×ܶî

8. V_NUM NUMBER(5):=0; --Ôö¼Ó¹¤×ʵÄÈËÊý 9. CURSOR emp_cursor IS

10. SELECT EMPNO,ENAME,SAL FROM EMP ORDER BY SAL ASC; 11. BEGIN

12. OPEN emp_cursor;

13. DBMS_OUTPUT.PUT_LINE('ÐÕÃû Ô­¹¤×Ê Ð¹¤×Ê'); 14. DBMS_OUTPUT.PUT_LINE('---------------------------'); 15. LOOP

16. FETCH emp_cursor INTO V_EMPNO,V_NAME,V_SAL; 17. EXIT WHEN emp_cursor%NOTFOUND; 18. V_SAL1:= V_SAL*0.1;

19. IF V_TOTAL>V_SAL1 THEN

20. V_TOTAL := V_TOTAL - V_SAL1; 21. V_NUM:=V_NUM+1;

22. DBMS_OUTPUT.PUT_LINE(V_NAME||TO_CHAR(V_SAL,'99999')|| 23. TO_CHAR(V_SAL+V_SAL1,'99999'));

24. UPDATE EMP SET SAL=SAL+V_SAL1 25. WHERE EMPNO=V_EMPNO; 26. ELSE

27. DBMS_OUTPUT.PUT_LINE(V_NAME||TO_CHAR(V_SAL,'99999')||TO_CHAR(V_SAL,'99999'));

28. END IF;

29. END LOOP;

30. DBMS_OUTPUT.PUT_LINE('---------------------------'); 31. DBMS_OUTPUT.PUT_LINE('Ôö¼Ó¹¤×ÊÈËÊý:'||V_NUM||' Ê£Ó๤×Ê£º'||V_TOTAL);

32. CLOSE emp_cursor; 33. COMMIT; 34. END;

Êä³ö½á¹ûΪ£º Sql´úÂë

1. ÐÕÃû Ô­¹¤×Ê Ð¹¤×Ê

2. --------------------------------------------- 3. SMITH 1289 1418 4. JAMES 1531 1684 5. MARTIN 1664 1830

6. MILLER 1730 1903

7. ALLEN 1760 1936 8. ADAMS 1771 1771 9. TURNER 1815 1815 10. WARD 1830 1830 11. BLAKE 2850 2850 12. CLARK 2850 2850

13. JONES 2975 2975 14. FORD 3000 3000 15. KING 5000 5000

16. ----------------------------------------------- 17. Ôö¼Ó¹¤×ÊÈËÊý£º5 Ê£Ó๤×Ê£º3 18. PL/SQL ¹ý³ÌÒѳɹ¦Íê³É¡£

¡¾Á·Ï°1¡¿°´²¿ÃűàºÅ´ÓСµ½´óµÄ˳ÐòÊä³ö¹ÍÔ±Ãû×Ö¡¢¹¤×ÊÒÔ¼°¹¤×ÊÓëÆ½¾ù¹¤×ʵIJ ¡¾Á·Ï°2¡¿ÎªËùÓйÍÔ±Ôö¼Ó¹¤×Ê£¬¹¤×ÊÔÚ1000ÒÔÄÚµÄÔö¼Ó30%£¬¹¤×ÊÔÚ1000¡«2000Ö®¼äµÄÔö¼Ó20%£¬2000ÒÔÉϵÄÔö¼Ó10%¡£

======================================================

oracle¶¯Ì¬ÓαêʵÀý

1£¬´ø²ÎÊýµÄÓαê

Óë´æ´¢¹ý³ÌºÍº¯ÊýÏàËÆ£¬¿ÉÒÔ½«²ÎÊý´«µÝ¸øÓα겢ÔÚ²éѯÖÐʹÓá£Õâ¶ÔÓÚ´¦ÀíÔÚijÖÖÌõ¼þÏ´ò¿ªÓαêµÄÇé¿ö·Ç³£ÓÐÓá£ËüµÄÓï·¨ÈçÏ£º

CURSOR cursor_name[(parameter[,parameter],...)] IS select_statement; ¶¨Òå²ÎÊýµÄÓï·¨ÈçÏ£º

Parameter_name [IN] data_type[{:=|DEFAULT} value]

Óë´æ´¢¹ý³Ì²»Í¬µÄÊÇ£¬ÓαêÖ»ÄܽÓÊÜ´«µÝµÄÖµ£¬¶ø²»ÄÜ·µ»ØÖµ¡£²ÎÊýÖ»¶¨ÒåÊý¾ÝÀàÐÍ£¬Ã»ÓдóС¡£

ÁíÍâ¿ÉÒÔ¸ø²ÎÊýÉ趨һ¸öȱʡֵ£¬µ±Ã»ÓвÎÊýÖµ´«µÝ¸øÓαêʱ£¬¾ÍʹÓÃȱʡֵ¡£ÓαêÖж¨ÒåµÄ²ÎÊýÖ»ÊÇÒ»¸öռλ·û£¬ÔÚ±ð´¦ÒýÓøòÎÊý²»Ò»¶¨¿É¿¿¡£ ÔÚ´ò¿ªÓαêʱ¸ø²ÎÊý¸³Öµ£¬Óï·¨ÈçÏ£º

OPEN cursor_name[value[,value]....]; ²ÎÊýÖµ¿ÉÒÔÊÇÎÄ×Ö»ò±äÁ¿¡£ Àý£º DECALRE

CURSOR c_dept IS SELECT * FROM dept ORDER BY deptno; CURSOR c_emp (p_dept VARACHAR2) IS SELECT ename,salary FROM emp

WHERE deptno=p_dept ORDER BY ename

r_dept DEPT%ROWTYPE; v_ename EMP.ENAME%TYPE; v_salary EMP.SALARY%TYPE; v_tot_salary EMP.SALARY%TYPE; BEGIN

OPEN c_dept; LOOP

FETCH c_dept INTO r_dept;

EXIT WHEN c_dept%NOTFOUND;

DBMS_OUTPUT.PUT_LINE('Department:'|| r_dept.deptno||'-'||r_dept.dname); v_tot_salary:=0;

OPEN c_emp(r_dept.deptno);

LOOP

FETCH c_emp INTO v_ename,v_salary; EXIT WHEN c_emp%NOTFOUND;

DBMS_OUTPUT.PUT_LINE('Name:'|| v_ename||' salary:'||v_salary); v_tot_salary:=v_tot_salary+v_salary;

END LOOP; CLOSE c_emp;

DBMS_OUTPUT.PUT_LINE('Toltal Salary for dept:'|| v_tot_salary); END LOOP; CLOSE c_dept; END;

2. ×Ö·û´®±äÁ¿

¶¯Ì¬Óαê¾ÍÊǶ¯Ì¬¶¨ÒåÓαꡣ declare

type t_sor is ref cursor;

v_sor t_sor; --±ØÐèµÄ£¬Í¨¹ý¶ÔÏó±äÁ¿ÊµÏÖ. ... begin .. end; /

¸øÒ»¸öÍêÕûµÄÀý×Ó:

create or replace procedure SP_CLEAR(V_TABLE IN STRING) IS