PL/SQL包4(使用纯度级别)

当使用包的公用函数时,它既可以作为表达式的一部分使用,也可以在SQL语句中使用。但如果要在SQL语句中引用包的公用函数,那么该公用函数不能包含DML语句(INSERT、UPDATE和DELETE),也不能读写远程包的变量。为了对的公用函数加以限制,在定义包规范时可以使用纯度级别(purity level)限制公用函数。定义纯度级别的语法如下:
PRAGMA RESTRICT_REFERENCES (function_name,
  WNDS[,WNPS][,RNDS][,RNPS]);
WNDS:用于限制函数不能修改数据库数据(即禁止执行DML操作)。
WNPS:用于限制函数不能修改包变量(即不能给包变量赋值)。
RNDS:用于限制函数不能读取数据库数据(即禁止执行SELECT操作)。
RNPS:用于限制函数不能读取包变量(即不能将包变量赋值给其他变量)。
1、建立包规范
CREATE OR REPLACE PACKAGE pkg_purity IS
  minsal NUMBER(6,2);
  maxsal NUMBER(6,2);
  FUNCTION max_sal RETURN NUMBER;
  FUNCTION min_sal RETURN NUMBER;
  PRAGMA RESTRICT_REFERENCES(max_sal,WNPS);
  PRAGMA RESTRICT_REFERENCES(min_sal,WNPS);
END pkg_purity;
2、建立包体
错误示例如下:
CREATE OR REPLACE PACKAGE BODY pkg_purity IS
  FUNCTION max_sal RETURN NUMBER
  IS
  BEGIN
    SELECT MAX(sal) INTO maxsal FROM emp;
    RETURN maxsal;
  END;
  
  FUNCTION min_sal RETURN NUMBER
  IS
  BEGIN
    SELECT MIN(sal) INTO minsal FROM emp;
    RETURN minsal;
  END;
END pkg_purity;
在函数体内正确引用这两个变量的包体如下:
CREATE OR REPLACE PACKAGE BODY pkg_purity IS
  FUNCTION max_sal RETURN NUMBER
  IS
  BEGIN
    RETURN maxsal;
  END;
  
  FUNCTION min_sal RETURN NUMBER
  IS
  BEGIN
    RETURN minsal;
  END;
  --包构造过程
  BEGIN
    SELECT MIN(sal),MAX(sal) INTO minsal,maxsal FROM emp;
END pkg_purity;
3、调用包的公用函数
SQL> VAR minsal NUMBER;
SQL> VAR maxsal NUMBER;
SQL> EXEC :minsal := pkg_purity.min_sal;
SQL> EXEC :maxsal := pkg_purity.max_sal();
SQL> print minsal,maxsal
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值