个人头像

Oracle数据库作业:PL/SQL程序

发表于2022-4-28  | 分类于秋风无言

作业内容:

1、创建employees表,包含employee_id, first_name, last_name, email, hire_date, job_id, salary, department_id。

2、编写PL/SQL程序,实现如下功能:输入一个员工号,修改该员工的工资。如果该员工为10号部门,则工资增加100元;若为20号部门,则工资增加140元;若为30号部门,则工资增加200元;否则增加300元。

3、编写PL/SQL程序,实现如下功能:利用for循环统计并输出各个部门的平均工资。

不多说废话,直接上代码:

步骤一:建表

CREATE TABLE employees (
  EMPLOYEE_ID numeric(6) NOT NULL primary key,
  FIRST_NAME varchar2(20) DEFAULT NULL,
  LAST_NAME varchar2(25) NOT NULL,
  EMAIL varchar2(25) NOT NULL,
  HIRE_DATE date NOT NULL,
  JOB_ID varchar2(10) NOT NULL,
  SALARY decimal(8,2) DEFAULT NULL,
  DEPARTMENT_ID numeric(4) DEFAULT NULL
);

步骤二:声明日期格式为美国,并加入数据

 alter session set nls_date_language='american';

insert into employees
values(024226,'c','xy','qfwy@qfwys.cn','23-Aug-2001','01','1000','10');
insert into employees
values(024219,'l','cb','lcb@qfwys.cn','24-Aug-2001','02','10000','400');
insert into employees
values(024203,'c','x','cx@qfwys.cn','22-Aug-2001','03','10','10');

步骤三:编写程序

DECLARE
  v_deptno employees.department_id%type;
  v_increment NUMBER(4);
  v_empno  employees.employee_id%type;
BEGIN
  v_empno:=&x;
  SELECT department_id INTO v_deptno FROM employees 
  WHERE employee_id=v_empno;
  CASE v_deptno
    WHEN 10 THEN v_increment:=100;
    WHEN 20 THEN v_increment:=140;
    WHEN 30 THEN v_increment:=200;
    ELSE  v_increment:=300;
 END CASE;
 UPDATE employees SET salary=salary+v_increment 
 WHERE employee_id=v_empno; 
END;
/

步骤四:打开输出,编写程序

set serveroutput on

DECLARE
  CURSOR c_dept_stat IS 
  SELECT department_id,avg(salary) avgsal
  FROM employees GROUP BY department_id;
BEGIN
  FOR v_dept IN c_dept_stat LOOP
    DBMS_OUTPUT.PUT_LINE(v_dept.department_id||' '||v_dept.avgsal);
  END LOOP;
END;
/