Oracle 包练习

 1 /*
 2 创建一个程序包,包里面实现如下功能
 3 1:构建一个过程,根据用户传入的最低工资计算出emp表中
 4   低于最低工资的人数及这些人员信息
 5 2:构建一个函数,根据传入的年月,计算该日期入职
 6   员工的人数
 7 */
 8 
 9 --包规范
10 create or replace package emp_controller
11 as
12        --创建一个ref游标
13        type emplist is ref cursor return emp%rowtype;
14 
15        procedure check_sal_less(v_min number,v_count out number,v_emplist out emplist);
16        
17        function count_same_year_emp(v_year number) return number;
18        
19 end;
20 
21 --包主体
22 create or replace package body emp_controller
23 as
24        --实现过程
25        procedure check_sal_less(v_min number,v_count out number,v_emplist out emplist)
26        as
27        begin
28            --根据传入的最低工资,计算出表中低于最低工资的人数
29            select count(*) into v_count from myemp
30            where sal < v_min;
31            
32            --将工资低于最低工资的人存放到游标中
33            --打开游标
34            open v_emplist for select * from myemp
35            where sal < v_min;
36        end;
37        
38        --实现函数
39        function count_same_year_emp(v_year number) return number
40        as
41            v_number number;
42        begin
43            --根据传入的年份来统计该年份入职的员工数量
44            select count(*) into v_number from myemp
45            where to_char(hiredate,'yyyy') = v_year;
46            
47            return v_number;
48        end;
49 end;
50 
51 
52 --包程序测试
53 declare
54     v_count number;
55     v_emp emp_controller.emplist;
56     v_e myemp%rowtype;
57 begin
58     --根据传入的最低工资,计算出表中低于最低工资的人数
59     emp_controller.check_sal_less(2000,v_count,v_emp);
60     dbms_output.put_line('低于最低工资2000的人数有:'||v_count||',分别是:');
61     loop
62       fetch v_emp into v_e;
63       exit when v_emp%notfound;
64       dbms_output.put_line('姓名:'||v_e.ename||',薪水:'||v_e.sal);
65       dbms_output.put_line('---------------------------------------');
66     end loop;
67 end;
68 
69 --包测试
70 declare
71     v_number number;
72 begin
73     --输出测试,直接调用函数,输出返回值
74     dbms_output.put_line(emp_controller.count_same_year_emp('1981'));
75 end;

 

posted @ 2017-08-04 08:58  木栩  阅读(712)  评论(0编辑  收藏  举报