已经有创建一个表:
CREATE TABLE EMP1
(EMPNO   NUMBER(4)  NOT NULL PRIMARY KEY,
ENAME    VARCHAR2(10),
JOB       VARCHAR2(10),
MGR      NUMBER(4),
HIREDATE  DATE,
SAL       NUMBER(7,2),
COMM    NUMBER(7,2),
DEPTNO   NUMBER(2)  NOT  NULL);
11、在emp表上创建一个触发器,当插入、删除或修改员工信息时,统计各个部门的人数及平均工资并输出。
12、创建一个包,包含一个过程和一个函数。过程以部门号为参数输出该部门中工资最高的员工名和员工号,函数以部门号为参数返回该部门员工的最高工资。
大家救我一命吧!

解决方案 »

  1.   


    11.--这不是和7一样的嘛!
    create or replace trigger tri_change_emp
    before insert or delete or update on emp
    for each row
    begin
         for v_f in (
             select deptno,count(*) cnt,avg(sal) avg_sal
             from emp
             group by deptno)
         loop
             dbms_output.put_line('deptno:'|| v_f.deptno||
             ' the number of employee:'||v_f.cnt||
             ' the Average wage:'||v_f.avg_sal);
         end loop;
    end tri_change_emp;
      

  2.   


    --12.自己测试测试吧
    create or replace package pkg_emp as
    function fun_max_sal(deptno_in in emp.deptno%type)
             return number;
    procedure pro_max_sal_emp(deptno_in in emp.deptno%type);
    end pkg_emp;create or replace package body pkg_emp as
    function fun_max_sal(deptno_in in emp.deptno%type)
    as
      max_sal number;
    begin
         select max(sal) into max_sal
         from emp
         where deptno=deptno_in;
         return max_sal;
    end fun_max_sal;procedure pro_max_sal_emp(deptno_in in emp.deptno%type)
    as
      v_ename emp.ename%type;
      v_empno emp.empno%type;
    begin
         select ename,empno
         into v_ename,v_empno
         from emp
         where sal=(
               select max(sal)
               from emp where deptno=deptno_in);
         dbms_output.put_line(v_ename||' '||v_empno);
    end pro_max_sal_emp;
    end pkg_emp;
    /
      

  3.   

    11、在emp表上创建一个触发器,当插入、删除或修改员工信息时,统计各个部门的人数及平均工资并输出。这种题目是有问题的。
    一般在表自身的触发器中不能再select 自己。
    就算使用自治事务,也得不到插入、更新、删除之后
    的各部门的人数及平均工资,而只能统计操作之前的。