2018-07-13 14:54:46

 1 --1.创建一个包,包含一个为雇员加薪的过程,一个为雇员减薪的过程
 2 CREATE OR REPLACE PACKAGE pac_test1
 3 IS
 4   PROCEDURE addsal(NO emp.empno%TYPE,addsal emp.sal%TYPE);
 5   procedure minussal(no emp.empno%type,minussal emp.sal%type);
 6 END;
 7 
 8 
 9 CREATE OR REPLACE PACKAGE body pac_test1
10 IS
11   PROCEDURE addsal(NO emp.empno%TYPE,addsal emp.sal%TYPE)
12   is
13   BEGIN
14     UPDATE emp SET sal=sal+addsal WHERE empno=NO;
15   end;
16   PROCEDURE minussal(NO emp.empno%TYPE,minussal emp.sal%TYPE)
17   IS
18   BEGIN
19     UPDATE emp SET sal=sal-minussal WHERE empno=NO;
20   end;
21 END;
22 
23 
24 --2.编写一个过程,验证用户登陆。如果用户名、密码匹配,输出Y,否则输出N    emp表中的ename为用户名 empno为密码
25 CREATE OR REPLACE PROCEDURE pro_test2(username VARCHAR2,PASSWORD NUMBER,flag out VARCHAR2)
26 IS
27   v_count number(2);
28 BEGIN
29   SELECT count(empno) INTO v_count FROM emp WHERE ename=username AND empno=PASSWORD;
30   IF v_count>0 THEN flag:='Y';
31   ELSE flag:='N';
32   END IF;
33 END;
34 
35 
36 --3.编写一个函数,根据雇员编号,计算调整后的工资
37 如果该雇员从事经理工作,且工资大于3000,则工资上涨20%,否则上涨35%
38 其他情况均上涨10%,输出雇员编号、姓名、上涨后的工资
39 
40 
41 CREATE OR REPLACE FUNCTION fun_test3(NO emp.empno%TYPE) RETURN VARCHAR2
42 IS
43   v_ename emp.ename%TYPE;
44   v_sal emp.sal%TYPE;
45   v_newsal emp.sal%TYPE;
46   v_job emp.job%type;
47   v_info varchar2(100);
48 BEGIN
49   SELECT ename,sal,JOB INTO v_ename,v_sal,v_job FROM emp WHERE empno=NO;
50   IF upper(v_job)='MANAGER' THEN
51     IF v_sal>3000 THEN 
52       v_newsal:=v_sal*1.2;
53     ELSE v_newsal:=v_sal*1.35;
54     END IF;
55   ELSE v_newsal:=v_sal*1.1;
56   END IF;
57    v_info:= NO || ',' || v_ename || ',' || v_newsal;
58   RETURN v_info;
59 end;
60 
61 
62 --4.创建一个包
63 包中含有一个存储过程,实现涨工资的功能,输入雇员姓名,如果其工作年限超过20年,工资增加2000
64 工作年限在10-20年,工资增加1000,工作年限在5-10年,工资增加500,输出雇员姓名和增涨后的工资
65 包中还含有一个函数,实现输入工资,判断工资如果大于4500,返回1,否则返回0
66 
67 
68 CREATE OR REPLACE PACKAGE pac_test4
69 IS
70   PROCEDURE pro_addsal(NAME emp.ename%TYPE,info out VARCHAR2);
71   FUNCTION fun_sal(salary emp.sal%TYPE) RETURN NUMBER;
72 end;
73 
74 
75 CREATE OR REPLACE PACKAGE body pac_test4
76 IS
77   PROCEDURE pro_addsal(NAME emp.ename%TYPE,info out VARCHAR2)
78   IS
79     v_year NUMBER(5);
80     v_sal emp.sal%TYPE;
81   BEGIN
82     SELECT trunc(months_between(SYSDATE,hiredate)/12),sal INTO v_year,v_sal FROM emp WHERE upper(ename)=upper(NAME);
83     IF v_year>20 THEN v_sal:=v_sal+2000;
84     elsif v_year>=10 THEN v_sal:=v_sal+1000;
85     elsif v_year>=5 THEN v_sal:=v_sal+500;
86     END IF;
87     info:=NAME || ','||v_sal;
88   end;
89   FUNCTION fun_sal(salary emp.sal%TYPE) RETURN NUMBER
90   IS
91     v_flag NUMBER(1);
92   BEGIN
93     IF salary>4500 THEN 
94       v_flag:=1;
95     ELSE v_flag:=0;
96     END IF;
97     RETURN v_flag;
98   end;
99 end;

 

posted on 2018-07-13 14:55  亮晶晶的小宇宙  阅读(273)  评论(0编辑  收藏  举报