PL/SQL复习十二 包

--建立包规范

create or replace package emp_package

is

g_deptno number(3) := 30; --全局变量

procedure add_employee(   --过程

   eno in number,

   name in varchar2,  

   salary in number,

   dno in number default g_deptno

);

procedure fire_employee(eno in number); --过程

function get_sal(eno in number) return number; --函数

end emp_package;

/

--建立包体

create or replace package body emp_package

is

  function validate_deptno(v_deptno in number) --私有函数,外界不能调用

  return boolean

  is

    v_temp int;

  begin

    select 1 into v_temp from dept where deptno = v_deptno;

    return true;

    exception

      when no_data_found then

        return false;

  end;

  procedure add_employee(   --过程

     eno in number,

     name in varchar2,  

     salary in number,

     dno in number default g_deptno

  ) is

  begin

    if validate_deptno(dno) 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;  

  procedure fire_employee(eno in number) is  --过程

  begin

    delete from emp where empno = eno;

    if sql%notfound then

      raise_application_error(-20012,'该雇员不存在');

    end if;

  end;

  function get_sal(eno in 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;

end emp_package;

/


调用:

调用包变量:SQL> exec emp_package.g_deptno := 20;

调用包过程:SQL> exec emp_package.add_employee(1111,'lixin',2000);

调用包函数:

SQL> var salary number;

SQL> exec :salary := emp_package.get_sal(7788);

 

PL/SQL procedure successfully completed

salary

---------

3000

以其他身份调用包的公共组件:

SQL> exec lixin.emp_package.add_employee(1236,'lixin2',20);

远程调用包组件:

SQL> exec emp_package.add_employee@orcl(1236,'lixin2',20);


---------------------------------------------------------------------------------------------------

包纯度级别:

create or replace package my_package is

minsal number;

maxsal number;

function max_sal return number;

function min_sal return number;

pragma restrict_references(max_sal,wnps);

pragma restrict_references(min_sal,wnps);

end;

/

wnps:不能修改变量

wnds:不能修改数据库

rnds:不能读取数据库

rnps不能读取包变量

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值