zoukankan      html  css  js  c++  java
  • 逆袭之旅DAY17.东软实训.Oracle.PLSQL.过程,函数,包,练习

    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;
    年轻人能为世界年轻人能为世界做些什么
  • 相关阅读:
    Linux网络----数据包的接收过程
    Linux----运维必备的 13 款实用工具
    Linux----常用命令
    Linux----内核学习过程
    Linux性能及调优指南(翻译)之Linux进程管理
    Linux 下cut的使用
    Linux ps -ef和ps aux的区别
    Linux awk命令的一个简单应用
    安卓中的三种监听方式 (按钮控件举例)
    安卓中学习 sqlite
  • 原文地址:https://www.cnblogs.com/twinkle-star/p/9304954.html
Copyright © 2011-2022 走看看