| 
                          ? 说明:该程序中将字段内容垂直排列。V_count变量记录循环次数,即部门个数。? 【训练4】? 已知每个部门有一个经理,编写程序,统计输出部门名称、部门总人数、总工资和部门经理。? 输入并执行如下程序:?  
 
  
  
    Sql代码? 
   
  
 
- SET?SERVEROUTPUT?ON? ??
  
  - DECLARE??
  
  - ?v_deptno?number(8); ??
  
  - ?v_count?number(3); ??
  
  - ?v_sumsal?number(6); ??
  
  - ?v_dname??varchar2(15); ??
  
  - v_manager??varchar2(15); ??
  
  - ?CURSOR?list_cursor?IS??
  
  - ???SELECT?deptno,count(*),sum(sal)?FROM?emp?group?by?deptno; ??
  
  - BEGIN??
  
  - ??OPEN?list_cursor;? ??
  
  - ??DBMS_OUTPUT.PUT_LINE(‘-----------?部?门?统?计?表?-----------‘); ??
  
  - DBMS_OUTPUT.PUT_LINE(‘部门名称???总人数??总工资???部门经理‘); ??
  
  - ??FETCH?list_cursor?INTO?v_deptno,v_count,v_sumsal;? ??
  
  - ??WHILE?list_cursor%found?LOOP?? ??
  
  - ?SELECT?dname?INTO?v_dname?FROM?dept ??
  
  - ????WHERE?deptno=v_deptno; ??
  
  - ????SELECT?ename?INTO?v_manager?FROM?emp? ??
  
  - ????WHERE?deptno=v_deptno?and?job=‘MANAGER‘; ??
  
  - DBMS_OUTPUT.PUT_LINE(rpad(v_dname,13)||rpad(to_char(v_count),8) ??
  
  - ??????||rpad(to_char(v_sumsal),9)||v_manager); ??
  
  - ????FETCH?list_cursor?INTO?v_deptno,v_sumsal;? ??
  
  - ????END?LOOP; ??
  
  - ????????DBMS_OUTPUT.PUT_LINE(‘--------------------------------------‘); ??
  
  - ????????CLOSE?list_cursor; ??
  
  - ????????END;??
  
  
 
 输出结果为:?  
 
  
  
    Sql代码? 
   
  
 
- --------------------?部?门?统?计?表?-----------------???
  
  - ????????部门名称?????总人数??总工资?????部门经理 ??
  
  - ????????ACCOUNTING????3??????8750???????CLARK ??
  
  - ????????RESEARCH??????5?????10875???????JONES ??
  
  - ????????SALES?????????????6??????9400???????BLAKE ??
  
  - ????????-------------------------------------------------------------???
  
  - ????????PL/SQL?过程已成功完成。???
  
  
 
 说明:游标中使用到了起分组功能的SELECT语句,统计出各部门的总人数和总工资。再根据部门编号和职务找到部门的经理。该程序假定每个部门有一个经理。? 【训练5】? 为雇员增加工资,从工资低的雇员开始,为每个人增加原工资的10%,限定所增加的工资总额为800元,显示增加工资的人数和余额。? 输入并调试以下程序:?  
 
  
  
    Sql代码? 
   
  
 
- SET?SERVEROUTPUT?ON? ??
  
  - DECLARE? ??
  
  - ??V_NAME?CHAR(10); ??
  
  - ??V_EMPNO?NUMBER(5); ??
  
  - ??V_SAL?NUMBER(8); ??
  
  - ??V_SAL1?NUMBER(8); ??
  
  - ??V_TOTAL?NUMBER(8)?:=?800;?????--增加工资的总额???
  
  - V_NUM?NUMBER(5):=0;?????--增加工资的人数???
  
  - ?????????CURSOR?emp_cursor?IS? ??
  
  - ??????????SELECT?EMPNO,ENAME,SAL?FROM?EMP?ORDER?BY?SAL?ASC; ??
  
  - ????????BEGIN??
  
  - ?????????OPEN?emp_cursor; ??
  
  - ????????DBMS_OUTPUT.PUT_LINE(‘姓名??????原工资??新工资‘);? ??
  
  - ????????DBMS_OUTPUT.PUT_LINE(‘---------------------------‘);? ??
  
  - ?????????LOOP ??
  
  - ????????????FETCH?emp_cursor?INTO?V_EMPNO,V_NAME,V_SAL; ??
  
  - EXIT?WHEN?emp_cursor%NOTFOUND; ??
  
  - ?????????V_SAL1:=?V_SAL*0.1; ??
  
  - ????????????IF?V_TOTAL>V_SAL1?THEN??
  
  - ????????????V_TOTAL?:=?V_TOTAL?-?V_SAL1; ??
  
  - ????????????V_NUM:=V_NUM+1; ??
  
  - ????DBMS_OUTPUT.PUT_LINE(V_NAME||TO_CHAR(V_SAL,‘99999‘)|| ??
  
  - ????????TO_CHAR(V_SAL+V_SAL1,‘99999‘)); ??
  
  - ?????????????UPDATE?EMP?SET?SAL=SAL+V_SAL1 ??
  
  - ?????????????WHERE?EMPNO=V_EMPNO; ??
  
  - ?????????ELSE??
  
  - DBMS_OUTPUT.PUT_LINE(V_NAME||TO_CHAR(V_SAL,‘99999‘)||TO_CHAR(V_SAL,‘99999‘)); ??
  
  - ?????????END?IF; ??
  
  - ????????END?LOOP; ??
  
  - ????????DBMS_OUTPUT.PUT_LINE(‘---------------------------‘); ??
  
  - ????????DBMS_OUTPUT.PUT_LINE(‘增加工资人数:‘||V_NUM||‘?剩余工资:‘||V_TOTAL);?? ??
  
  - ?????????CLOSE?emp_cursor;? ??
  
  - ?????????COMMIT; ??
  
  - ?????????END;??
  
  
 
 输出结果为:?  
 
  
  
    Sql代码? 
   
  
 
- 姓名????????原工资??新工资 ??
  
   - ????????---------------------------------------------???
  
   - SMITH???????1289???1418 ??
  
   - JAMES???????1531???1684 ??
  
   - MARTIN??????1664???1830 ??
  
   - MILLER??????????1730???1903 ??
  
   - ALLEN???????????1760???1936 ??
  
   - ADAMS???????1771???1771 ??
  
   - TURNER??????1815???1815 ??
  
   - WARD????????1830???1830 ??
  
   - BLAKE???????2850???2850 ??
  
   - CLARK???????2850???2850 ??
  
   - JONES???????????2975???2975 ??
  
   - FORD????????????3000???3000 ??
  
   - KING????????????5000???5000 ??
  
   - -----------------------------------------------???
  
   - 增加工资人数:5?剩余工资:3 ??
  
   - PL/SQL?过程已成功完成。??
  
    
        
            
        	
                        (编辑:52站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |