Oracle 包练习
时间:2021-07-01 10:21:17
帮助过:29人阅读
/*
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;
Oracle 包练习
标签:sam 实现 package 函数 put line weight rac roc