RETURN v_sal; END;
创建一个函数,以部门号为参数,返回该部门的平均工资。
CREATE OR REPLACE FUNCTION fun_avgsal(p_deptno emp.deptno%type) RETURN emp.sal%type AS
v_sal emp.sal%type; BEGIN
SELECT AVG(SAL) INTO V_SAL FROM EMP WHERE DEPTNO=P_DEPTNO; RETURN V_SAL; END;
实验十 触发器
在emp表上创建一个触发器,当插入、删除或修改员工信息时,统计各个部门的人数及平均工资,并输出。
CREATE OR REPLACE TRIGGER trg_emp AFTER INSERT OR UPDATE OR DELETE ON EMP DECLARE
v_sal emp.sal%type; v_count number; BEGIN
SELECT AVG(SAL),COUNT(*) INTO V_SAL,V_COUNT FROM EMP; DBMS_OUTPUT.PUT_LINE(V_SAL||' '||V_COUNT); END;
为emp表创建一个触发器,当插入新员工时显示新员工的员工号、员工名;当更新员工工资时,显示修改前后员工工资,并保证修改后的工资高于修改前的工资;当删除员工时,显示被删除的员工号、员工名。
CREATE OR REPLACE TRIGGER trg_emp
BEFORE INSERT OR UPDATE OR DELETE ON emp FOR EACH ROW BEGIN
IF INSERTING THEN
DBMS_OUTPUT.PUT_LINE(:new.empno||' '||:new.ename); ELSIF UPDATING THEN IF :new.sal<:old.sal THEN
RAISE_APPLICATION_ERROR(-20001,'The salary is lower!'); END IF;
DBMS_OUTPUT.PUT_LINE(:old.sal||' '||:new.sal); ELSE
DBMS_OUTPUT.PUT_LINE(:old.empno||' '||:old.ename);
第 26 页 共 27 页
END IF; END trg_emp;
第 27 页 共 27 页