oracle存储过程代码实例一(6)

2019-08-30 21:24

DBMS_OUTPUT.PUT_LINE('雇员职务:'||EMPLOYE.JOB); DBMS_OUTPUT.PUT_LINE('雇员工资:'||EMPLOYE.SAL); DBMS_OUTPUT.PUT_LINE('部门编号:'||EMPLOYE.DEPTNO); END SHOW_DETAIL;

----------------- 从EMP表取得一个雇员 -------------------- PROCEDURE GET_EMPLOYE(P_EMPNO NUMBER) AS BEGIN

SELECT * INTO EMPLOYE from EMP WHERE EMPNO=P_EMPNO; DBMS_OUTPUT.PUT_LINE('获取雇员'||EMPLOYE.ENAME||'信息成功'); EXCEPTION

WHEN OTHERS THEN

DBMS_OUTPUT.PUT_LINE('获取雇员信息发生错误!'); END GET_EMPLOYE;

---------------------- 保存雇员到EMP表 -------------------------- PROCEDURE SAVE_EMPLOYE AS BEGIN

UPDATE EMP SET ENAME=EMPLOYE.ENAME, SAL=EMPLOYE.SAL WHERE EMPNO=

EMPLOYE.EMPNO;

DBMS_OUTPUT.PUT_LINE('雇员信息保存完成!'); END SAVE_EMPLOYE;

---------------------------- 修改雇员名称 ------------------------------ PROCEDURE CHANGE_NAME(P_NEWNAME VARCHAR2) AS BEGIN

EMPLOYE.ENAME:=P_NEWNAME;

DBMS_OUTPUT.PUT_LINE('修改名称完成!'); END CHANGE_NAME;

---------------------------- 修改雇员工资 -------------------------- PROCEDURE CHANGE_SAL(P_NEWSAL NUMBER) AS BEGIN

EMPLOYE.SAL:=P_NEWSAL;

DBMS_OUTPUT.PUT_LINE('修改工资完成!');

END CHANGE_SAL; END EMPLOYE;

步骤2:获取雇员7788的信息: Sql代码

SET SERVEROUTPUT ON

EXECUTE EMPLOYE.GET_EMPLOYE(7788); SET SERVEROUTPUT ON

EXECUTE EMPLOYE.GET_EMPLOYE(7788); 结果为: Sql代码

获取雇员SCOTT信息成功 PL/SQL 过程已成功完成。 获取雇员SCOTT信息成功 PL/SQL 过程已成功完成。 步骤3:显示雇员信息: Sql代码

EXECUTE EMPLOYE.SHOW_DETAIL; EXECUTE EMPLOYE.SHOW_DETAIL; 结果为: Sql代码

------------------ 雇员信息 ------------------ 雇员编号:7788 雇员名称:SCOTT 雇员职务:ANALYST 雇员工资:3000 部门编号:20

PL/SQL 过程已成功完成。 ------------------ 雇员信息 ------------------ 雇员编号:7788 雇员名称:SCOTT 雇员职务:ANALYST 雇员工资:3000 部门编号:20

PL/SQL 过程已成功完成。 步骤4:修改雇员工资: Sql代码

EXECUTE EMPLOYE.CHANGE_SAL(3800); EXECUTE EMPLOYE.CHANGE_SAL(3800); 结果为: Sql代码 修改工资完成!

PL/SQL 过程已成功完成。 修改工资完成!

PL/SQL 过程已成功完成。

步骤5:将修改的雇员信息存入EMP表 Sql代码

EXECUTE EMPLOYE.SAVE_EMPLOYE; EXECUTE EMPLOYE.SAVE_EMPLOYE; 结果为: Sql代码

雇员信息保存完成!

PL/SQL 过程已成功完成。 雇员信息保存完成! PL/SQL 过程已成功完成。

说明:该包完成将EMP表中的某个雇员的信息取入内存记录变量,在记录变量中进行修改编辑,在确认显示信息正确后写回EMP表的功能。记录变量EMPLOYE用来存储取得的雇员信息,定义为私有变量,只能被包的内部模块访问。 【练习1】为包增加修改雇员职务和部门编号的功能。 阶段训练

下面的训练通过定义和创建完整的包EMP_PK并综合运用本章的知识,完成对雇员表的插入、删除等功能,包中的主要元素解释如下所示。 Sql代码

程序结构 类 型 说 明

V_EMP_COUNT 公有变量 跟踪雇员的总人数变化,插入、删除雇员的同时修改该变量的值

INIT 公有过程 对包进行初始化,初始化雇员人数和工资修改的上、下限 LIST_EMP 公有过程 显示雇员列表

INSERT_EMP 公有过程 通过编号插入新雇员 DELETE_EMP 公有过程 通过编号删除雇员

CHANGE_EMP_SAL 公有过程 通过编号修改雇员工资 V_MESSAGE 私有变量 存放准备输出的信息 C_MAX_SAL 私有变量 对工资修改的上限

C_MIN_SAL 私有变量 对工资修改的下限

SHOW_MESSAGE 私有过程 显示私有变量V_MESSAGE中的信息

EXIST_EMP 私有函数 判断某个编号的雇员是否存在,该函数被INSERT_EMP、DELETE_EMP和CHANGE_EMP_SAL等过程调用 程序结构 类 型 说 明

V_EMP_COUNT 公有变量 跟踪雇员的总人数变化,插入、删除雇员的同时修改该变量的值 INIT 公有过程 对包进行初始化,初始化雇员人数和工资修改的上、下限 LIST_EMP 公有过程 显示雇员列表

INSERT_EMP 公有过程 通过编号插入新雇员 DELETE_EMP 公有过程 通过编号删除雇员

CHANGE_EMP_SAL 公有过程 通过编号修改雇员工资 V_MESSAGE 私有变量 存放准备输出的信息 C_MAX_SAL 私有变量 对工资修改的上限 C_MIN_SAL 私有变量 对工资修改的下限

SHOW_MESSAGE 私有过程 显示私有变量V_MESSAGE中的信息

EXIST_EMP 私有函数 判断某个编号的雇员是否存在,该函数被INSERT_EMP、DELETE_EMP和CHANGE_EMP_SAL等过程调用 【训练1】 完整的雇员包EMP_PK的创建和应用。

步骤1:在SQL*Plus中登录SCOTT账户,输入以下包头和包体部分,按“执行”按钮编译: Sql代码

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 NUMBER,P_ENAMEVARCHAR2,P_JOB VARCHAR2,P_SAL NUMBER) IS BEGIN


oracle存储过程代码实例一(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:环己烷过氧化物分解技术

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: