IF NOT EXIST_EMP(P_EMPNO) THEN
INSERT INTO EMP(EMPNO,ENAME,JOB,SAL) VALUES(P_EMPNO,P_ENAME,P_JOB,P_SAL); COMMIT;
V_EMP_COUNT:=V_EMP_COUNT+1; V_MESSAGE:='雇员'||P_EMPNO||'已插入!'; ELSE
V_MESSAGE:='雇员'||P_EMPNO||'已存在,不能插入!'; END IF;
SHOW_MESSAGE; EXCEPTION
WHEN OTHERS THEN
V_MESSAGE:='雇员'||P_EMPNO||'插入失败!'; SHOW_MESSAGE; END INSERT_EMP;
--------------------------- 删除雇员过程 --------------------
PROCEDURE DELETE_EMP(P_EMPNO NUMBER) IS BEGIN
IF EXIST_EMP(P_EMPNO) THEN
DELETE from EMP WHERE EMPNO=P_EMPNO; COMMIT;
V_EMP_COUNT:=V_EMP_COUNT-1; V_MESSAGE:='雇员'||P_EMPNO||'已删除!'; ELSE
V_MESSAGE:='雇员'||P_EMPNO||'不存在,不能删除!'; END IF;
SHOW_MESSAGE; EXCEPTION
WHEN OTHERS THEN
V_MESSAGE:='雇员'||P_EMPNO||'删除失败!'; SHOW_MESSAGE; END DELETE_EMP;
--------------------------------------- 修改雇员工资过程 ------------------------------------
PROCEDURE CHANGE_EMP_SAL(P_EMPNO NUMBER,P_SAL NUMBER) IS
BEGIN
IF (P_SAL>V_MAX_SAL OR P_SAL V_MESSAGE:='雇员'||P_EMPNO||'不存在,不能修改工资!'; ELSE UPDATE EMP SET SAL=P_SAL WHERE EMPNO=P_EMPNO; COMMIT; V_MESSAGE:='雇员'||P_EMPNO||'工资已经修改!'; END IF; SHOW_MESSAGE; EXCEPTION WHEN OTHERS THEN V_MESSAGE:='雇员'||P_EMPNO||'工资修改失败!'; SHOW_MESSAGE; END CHANGE_EMP_SAL; ---------------------------- 显示信息过程 ---------------------------- PROCEDURE SHOW_MESSAGE IS BEGIN DBMS_OUTPUT.PUT_LINE('提示信息:'||V_MESSAGE); END SHOW_MESSAGE; ------------------------ 判断雇员是否存在函数 ------------------- FUNCTION EXIST_EMP(P_EMPNO NUMBER) RETURN BOOLEAN IS V_NUM NUMBER; --局部变量 BEGIN SELECT COUNT(*) INTO V_NUM from EMP WHERE EMPNO=P_EMPNO; IF V_NUM=1 THEN RETURN TRUE; ELSE RETURN FALSE; END IF; END EXIST_EMP; ----------------------------- END EMP_PK; CREATE OR REPLACE PACKAGE EMP_PK --包头部分 IS V_EMP_COUNT NUMBER(5); --雇员人数 PROCEDURE INIT(P_MAX NUMBER,P_MIN NUMBER); --初始化 PROCEDURE LIST_EMP; --显示雇员列表 PROCEDURE INSERT_EMP(P_EMPNO NUMBER,P_ENAMEVARCHAR2,P_JOB VARCHAR2, P_SAL NUMBER); --插入雇员 PROCEDURE DELETE_EMP(P_EMPNO NUMBER); --删除雇员 PROCEDURE CHANGE_EMP_SAL(P_EMPNO NUMBER,P_SAL NUMBER); --修改雇员工资 END EMP_PK; /CREATE OR REPLACE PACKAGE BODY EMP_PK --包体部分 IS V_MESSAGE VARCHAR2(50); --显示信息 V_MAX_SAL NUMBER(7); --工资上限 V_MIN_SAL NUMBER(7); --工资下限 FUNCTION EXIST_EMP(P_EMPNO NUMBER) RETURN BOOLEAN; --判断雇员是否存在函数 PROCEDURE SHOW_MESSAGE; --显示信息过程 ------------------------------- 初始化过程 ---------------------------- PROCEDURE INIT(P_MAX NUMBER,P_MIN NUMBER) IS BEGIN SELECT COUNT(*) INTO V_EMP_COUNT from EMP; V_MAX_SAL:=P_MAX; V_MIN_SAL:=P_MIN; V_MESSAGE:='初始化过程已经完成!'; SHOW_MESSAGE; END INIT; ---------------------------- 显示雇员列表过程 --------------------- PROCEDURE LIST_EMP IS BEGIN DBMS_OUTPUT.PUT_LINE('姓名 职务 工资'); FOR emp_rec IN (SELECT * from EMP) LOOP DBMS_OUTPUT.PUT_LINE(RPAD(emp_rec.ename,10,'')||RPAD(emp_rec.job,10,' ')||TO_CHAR(emp_rec.sal)); END LOOP; DBMS_OUTPUT.PUT_LINE('雇员总人数'||V_EMP_COUNT); END LIST_EMP; ----------------------------- 插入雇员过程 ----------------------------- PROCEDUREINSERT_EMP(P_EMPNO VARCHAR2,P_SAL NUMBER) IS BEGIN IF NOT EXIST_EMP(P_EMPNO) THEN INSERT COMMIT; V_EMP_COUNT:=V_EMP_COUNT+1; V_MESSAGE:='雇员'||P_EMPNO||'已插入!'; ELSE V_MESSAGE:='雇员'||P_EMPNO||'已存在,不能插入!'; END IF; SHOW_MESSAGE; EXCEPTION WHEN OTHERS THEN V_MESSAGE:='雇员'||P_EMPNO||'插入失败!'; SHOW_MESSAGE; END INSERT_EMP; --------------------------- 删除雇员过程 -------------------- PROCEDURE DELETE_EMP(P_EMPNO NUMBER) IS BEGIN INTO EMP(EMPNO,ENAME,JOB,SAL) VALUES(P_EMPNO,P_ENAME,P_JOB,P_SAL); NUMBER,P_ENAMEVARCHAR2,P_JOB IF EXIST_EMP(P_EMPNO) THEN DELETE from EMP WHERE EMPNO=P_EMPNO; COMMIT; V_EMP_COUNT:=V_EMP_COUNT-1; V_MESSAGE:='雇员'||P_EMPNO||'已删除!'; ELSE V_MESSAGE:='雇员'||P_EMPNO||'不存在,不能删除!'; END IF; SHOW_MESSAGE; EXCEPTION WHEN OTHERS THEN V_MESSAGE:='雇员'||P_EMPNO||'删除失败!'; SHOW_MESSAGE; END DELETE_EMP; --------------------------------------- 修改雇员工资过程 ------------------------------------ PROCEDURE CHANGE_EMP_SAL(P_EMPNO NUMBER,P_SAL NUMBER) IS BEGIN IF (P_SAL>V_MAX_SAL OR P_SAL ELSIF NOT EXIST_EMP(P_EMPNO) THEN V_MESSAGE:='雇员'||P_EMPNO||'不存在,不能修改工资!'; ELSE UPDATE EMP SET SAL=P_SAL WHERE EMPNO=P_EMPNO; COMMIT; V_MESSAGE:='雇员'||P_EMPNO||'工资已经修改!'; END IF; SHOW_MESSAGE; EXCEPTION WHEN OTHERS THEN V_MESSAGE:='雇员'||P_EMPNO||'工资修改失败!'; SHOW_MESSAGE; END CHANGE_EMP_SAL; ---------------------------- 显示信息过程 ---------------------------- PROCEDURE SHOW_MESSAGE IS