示例14 开发程序包
来源:互联网 发布:中电科大数据院 编辑:程序博客网 时间:2024/05/21 14:50
/*============================================================
示例5 程序包
============================================================*/
--需求:程序包完成以下业务需求
-- 1.添加雇员信息
-- 2.通过雇员编号修改薪水
-- 3.通过雇员名称修改薪水
-- 4.通过雇员编号查询薪水
/*********************************************************
包规范 EMP_PACKAGE
变量minsal ----------------------全局变量
变量maxsal ----------------------全局变量
过程add_employee------------------公用过程
过程upd_sal(eno,sal)--------------公用过程
过程upd_sal(name,sal)-------------公用过程
函数get_sal-----------------------公用函数
包主体 EMP_PACKAGE
构造函数--------------------------在运行包组件时将雇员的最低和最高工资赋给全局变量
/*********************************************************/
--程序包规范
create or replace package emp_package is
minsal emp.sal%type;
maxsal emp.sal%type;
-- 1.添加雇员信息
procedure add_employee(eno number,name varchar2,salary number,dno number);
-- 2.通过雇员编号修改薪水
procedure upd_sal(eno number,salary number);
-- 3.通过雇员名称修改薪水
procedure upd_sal(name varchar2,salary number);
-- 4.通过雇员编号查询薪水
function get_sal(eno number) return number;
end emp_package;
--程序包主体
create or replace package body emp_package is
-- 1.添加雇员信息
procedure add_employee(eno number,name varchar2,
salary number,dno number)
IS
begin
if salary between minsal and maxsal then
insert into emp (empno,ename,sal,deptno)values (eno,name,salary,dno);
else
raise_application_error(-20010,'工资不在范围内');
end if;
exception
when DUP_VAL_oN_INDEX then
raise_application_error(-20011,'该雇员已存在');
end;
-- 2.通过雇员编号修改薪水
procedure upd_sal(eno number,salary number)
IS
begin
if salary between minsal and maxsal then
update emp set sal=salary where empno=eno;
if sql%notfound then
raise_application_error(-20011,'该雇员不存在');
end if;
else
raise_application_error(-20010,'工资不在范围内');
end if;
end;
-- 3.通过雇员名称修改薪水
procedure upd_sal(name VARCHAR2,salary number)
IS
begin
if salary between minsal and maxsal then
update emp set sal=salary where UPPER(ename)=UPPER(name);
if sql%notfound then
raise_application_error(-20011,'该雇员不存在');
end if;
else
raise_application_error(-20010,'工资不在范围内');
end if;
end;
-- 4.通过雇员编号查询薪水
function get_sal(eno number) return number
is
v_sal emp.sal%type;
begin
select sal into v_sal from emp where empno=eno;
return v_sal;
exception
when no_data_found then
raise_application_error(-20012,'该雇员不存在');
end;
begin
--构造函数
SELECT MIN(sal),MAX(sal) INTO minsal,maxsal FROM emp;
end emp_package;
--调用添加雇员存储过程
declare
emp_20010 EXCEPTION;
PRAGMA EXCEPTION_INIT(emp_20010, -20010);
emp_20011 EXCEPTION;
PRAGMA EXCEPTION_INIT(emp_20011, -20011);
begin
emp_package.add_employee(5111,'mary',3000,20);
dbms_output.put_line('添加成功!');
commit;
exception
when emp_20010 then
dbms_output.put_line('工资不在范围内!');
rollback;
when emp_20011 then
dbms_output.put_line('该雇员已存在!');
rollback;
end;
--调用查询薪水函数
declare
v_sal number;
begin
v_sal:=emp_package.get_sal(7788);
dbms_output.put_line(v_sal);
end;
/*============================================================
示例5 程序包
============================================================*/
--需求:程序包完成以下业务需求
-- 1.添加雇员信息
-- 2.通过雇员编号修改薪水
-- 3.通过雇员名称修改薪水
-- 4.通过雇员编号查询薪水
/*********************************************************
包规范 EMP_PACKAGE
变量minsal ----------------------全局变量
变量maxsal ----------------------全局变量
过程add_employee------------------公用过程
过程upd_sal(eno,sal)--------------公用过程
过程upd_sal(name,sal)-------------公用过程
函数get_sal-----------------------公用函数
包主体 EMP_PACKAGE
构造函数--------------------------在运行包组件时将雇员的最低和最高工资赋给全局变量
/*********************************************************/
--程序包规范
create or replace package emp_package is
minsal emp.sal%type;
maxsal emp.sal%type;
-- 1.添加雇员信息
procedure add_employee(eno number,name varchar2,salary number,dno number);
-- 2.通过雇员编号修改薪水
procedure upd_sal(eno number,salary number);
-- 3.通过雇员名称修改薪水
procedure upd_sal(name varchar2,salary number);
-- 4.通过雇员编号查询薪水
function get_sal(eno number) return number;
end emp_package;
--程序包主体
create or replace package body emp_package is
-- 1.添加雇员信息
procedure add_employee(eno number,name varchar2,
salary number,dno number)
IS
begin
if salary between minsal and maxsal then
insert into emp (empno,ename,sal,deptno)values (eno,name,salary,dno);
else
raise_application_error(-20010,'工资不在范围内');
end if;
exception
when DUP_VAL_oN_INDEX then
raise_application_error(-20011,'该雇员已存在');
end;
-- 2.通过雇员编号修改薪水
procedure upd_sal(eno number,salary number)
IS
begin
if salary between minsal and maxsal then
update emp set sal=salary where empno=eno;
if sql%notfound then
raise_application_error(-20011,'该雇员不存在');
end if;
else
raise_application_error(-20010,'工资不在范围内');
end if;
end;
-- 3.通过雇员名称修改薪水
procedure upd_sal(name VARCHAR2,salary number)
IS
begin
if salary between minsal and maxsal then
update emp set sal=salary where UPPER(ename)=UPPER(name);
if sql%notfound then
raise_application_error(-20011,'该雇员不存在');
end if;
else
raise_application_error(-20010,'工资不在范围内');
end if;
end;
-- 4.通过雇员编号查询薪水
function get_sal(eno number) return number
is
v_sal emp.sal%type;
begin
select sal into v_sal from emp where empno=eno;
return v_sal;
exception
when no_data_found then
raise_application_error(-20012,'该雇员不存在');
end;
begin
--构造函数
SELECT MIN(sal),MAX(sal) INTO minsal,maxsal FROM emp;
end emp_package;
--调用添加雇员存储过程
declare
emp_20010 EXCEPTION;
PRAGMA EXCEPTION_INIT(emp_20010, -20010);
emp_20011 EXCEPTION;
PRAGMA EXCEPTION_INIT(emp_20011, -20011);
begin
emp_package.add_employee(5111,'mary',3000,20);
dbms_output.put_line('添加成功!');
commit;
exception
when emp_20010 then
dbms_output.put_line('工资不在范围内!');
rollback;
when emp_20011 then
dbms_output.put_line('该雇员已存在!');
rollback;
end;
--调用查询薪水函数
declare
v_sal number;
begin
v_sal:=emp_package.get_sal(7788);
dbms_output.put_line(v_sal);
end;
0 0
- 示例14 开发程序包
- 示例8 DBMS_SQL程序包
- 示例15 程序包中的静态游标
- 示例16 程序包中的动态游标
- linux中误删除程序包恢复示例
- 程序包
- 程序包开发相关概念及其应用
- 程序包开发相关概念及其应用
- 开发ROS 程序包控制机械臂
- Windows Store apps开发[23]创建Windows Store应用程序包
- android软件开发:后台监控应用程序包的安装&卸载
- Android开发eclipse无法签名android程序包的问题
- ReactNative开发如何加载iOS程序包里的文件
- spark在linux下开发使用程序包下载 tgz
- Android开发:Error:(3, 17) 错误: 程序包org.junit不存在
- 【ARM-Linux开发】【CUDA开发】NVIDIA TEGRA X1:LINUX驱动程序包多媒体用户指南
- Oracle程序包
- 程序包例子
- 【C语言】翻转单词序
- java 怎样给一个程序设置冷却时间? 好比一个操作我一天只想让客户执行一次?
- 交换机vlan配置
- 示例12 存储过程和参数为输出类型游标
- 示例13 函数创建和调用
- 示例14 开发程序包
- OC笔记 - iOS适配、block内存泄露、电话短信邮件等小功能(2015.3.27)
- 示例15 程序包中的静态游标
- USACO——Transformations 方块转换
- 杭电 HDU ACM 1555 How many days?
- strstr实现
- 示例16 程序包中的动态游标
- HTML列表
- android最常用的第四种点击事件