包的习题作业

-- 作业:
-- 创建一个包 并调用包中包含向员工表
-- 更改指定员工姓名的函数
-- 查询指定员工姓名,工资的存储过程并且在调用中给工资涨30%
-- 插入一条记录的函数 (捕获并处理唯一性异常) 
-- 删除指定员工记录的函数(捕获并处理数据不存在异常)

create or replace package dook_pack
                  is
                  DeptRec dept%rowtype;
                  function n_update(v_id emp.empno%type,v_name emp.ename%type)
                                    return number;
                  procedure cun_sal(v_id emp.empno%type);
                  function n_insert(v_id emp.empno%type,v_name emp.ename%type,
                                     v_sal emp.sal%type) return number;
                  function n_dal(v_id emp.empno%type)
                                     return number;
end dook_pack;
--第一条                 
create or replace package body dook_pack
                           is
                      function n_update(v_id emp.empno%type,v_name emp.ename%type)
                           return number
                           is
                           
begin
  update emp set ename = v_name where empno = v_id;
  if sql%found then
    return 1;
  else
    return -1;
   end if;
exception
  when others then
    return 0;
end n_update;
--第二条
procedure cun_sal(v_id emp.empno%type)
                            is
                            v_name emp.ename%type;
                            v_sal emp.sal%type;
begin
  select ename,sal+sal*0.3 into v_name,v_sal from emp where empno=v_id;
  dbms_output.put_line(v_name||'---'||v_sal);
exception
  when no_data_found then
    dbms_output.put_line('该员工不存在'); 
end cun_sal;
--第三条
function n_insert(v_id emp.empno%type,v_name emp.ename%type,
                                     v_sal emp.sal%type)
                                     return number
                                     is
                                     v_number number;
                                     no_remaraing exception;
                                     pragma exception_init(no_remaraing,-1);
begin 
  insert into emp(empno,ename,sal) values(v_id,v_name,v_sal);
  v_number := 1;
  return v_number;
exception
  when no_remaraing then
    v_number:=-1;
    return v_number;
  when others then
    v_number:=0;
    return v_number;
end n_insert;
--第三条
function n_dal(v_id emp.empno%type)
                           return number
                           is
begin
  delete from emp where empno=v_id;
  if sql%found then
    return 1;
  else
    return -1;
  end if;
exception
  when others then
    return 0;
end n_dal;
begin
  null;
end dook_pack;
--调用包
---第一条
declare
  v_c number;
begin
  v_c:=dook_pack.n_update(100,'ttg');
  if v_c = 1 then
    dbms_output.put_line('更改成功~~');
  elsif v_c = -1 then
    dbms_output.put_line('员工不存在,没更改');
  else
    dbms_output.put_line('其他异常');
  end if;
end;
--第二条

begin
  dook_pack.cun_sal(7499);
end;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值