Oracle12C--包的纯度级别(五十一)

  • 要对包中的函数进行语法限制,需要设置纯度级别
    • 语法:

PRAGMA RESTRICT_REFERENCES(函数名称,WNDS [,WNPS][,RNDS][,RUPS]);

  • 纯度级别:
  • 使用范例
    • 示例1:定义包中函数的纯度级别

CREATE OR REPLACE PACKAGE purity_pkg AS

-- 定义包中的变量

v_name VARCHAR2(10) := 'mldn' ;

-- 根据雇员编号删除雇员信息。但此函数不能执行更新操作

FUNCTION emp_delete_fun_wnds(p_empno emp.empno%TYPE) RETURN NUMBER ;

-- 根据雇员编号查找雇员信息。但此函数不能执行SELECT操作

FUNCTION emp_find_fun_rnds(p_empno emp.empno%TYPE) RETURN NUMBER ;

-- 使用新的内容修改v_name变量内容。但此函数不能修改包中的变量

FUNCTION change_name_fun_wnps(p_param VARCHAR2) RETURN VARCHAR2 ;

-- 读取v_name属性内容。但此函数不能读取包中变量

FUNCTION get_name_fun_rnps(p_param NUMBER) RETURN VARCHAR2 ;

PRAGMA RESTRICT_REFERENCES(emp_delete_fun_wnds, WNDS) ; -- 设置函数纯度级别

PRAGMA RESTRICT_REFERENCES(emp_find_fun_rnds, RNDS) ; -- 设置函数纯度级别

PRAGMA RESTRICT_REFERENCES(change_name_fun_wnps, WNPS) ; -- 设置函数纯度级别

PRAGMA RESTRICT_REFERENCES(get_name_fun_rnps, RNPS) ; -- 设置函数纯度级别

END ;

/

  • 接上例:上例定义了四种纯度级别,现在使用范例验证

CREATE OR REPLACE PACKAGE BODY purity_pkg AS

-- 根据雇员编号删除雇员信息。但此函数不能执行更新操作

FUNCTION emp_delete_fun_wnds(p_empno emp.empno%TYPE) RETURN NUMBER AS

BEGIN -- 此函数由于定义了wnds纯度,所以无法执行数据表更新操作

DELETE FROM emp WHERE empno=p_empno ;

RETURN 0 ; -- 满足函数要求返回数据

END ;

-- 根据雇员编号查找雇员信息。但此函数不能执行SELECT操作

FUNCTION emp_find_fun_rnds(p_empno emp.empno%TYPE) RETURN NUMBER AS

v_emp emp%ROWTYPE ;

BEGIN -- 此函数由于定义了rnds纯度,所以无法执行数据表查询操作

SELECT * INTO v_emp FROM emp WHERE empno=p_empno ;

RETURN 0 ; -- 满足函数要求返回数据

END ;

-- 使用新的内容修改v_name变量内容。但此函数不能修改包中的变量

FUNCTION change_name_fun_wnps(p_param VARCHAR2) RETURN VARCHAR2 AS

BEGIN -- 此函数由于定义了wnps纯度,所以函数无法修改包中的v_name变量

v_name := p_param ;

RETURN '' ; -- 满足函数要求返回数据

END ;

-- 读取v_name属性内容。但此函数不能读取包中变量

FUNCTION get_name_fun_rnps(p_param NUMBER) RETURN VARCHAR2 AS

BEGIN -- 此函数由于定义了rnps,所以函数无法读取v_name变量

RETURN v_name ;

END ;

END ;

/

效果:

  • 公共函数的说明
    • 如果用户在编写可被SQL直接引用的包公共函数,函数必须要符合WNDS(不能更新数据表),WNPS(不能修改包变量)和RNPS(不能读取包变量)这3个纯度
    • 示例1:定义包公用函数

CREATE OR REPLACE PACKAGE purity2_pkg AS

-- 定义取得雇员上缴个人所得税的函数

FUNCTION tax_fun(p_sal emp.sal%TYPE) RETURN NUMBER ;

-- 定义函数纯度:不能修改数据表、不能修改或读取包变量

PRAGMA RESTRICT_REFERENCES(tax_fun,WNDS,WNPS,RNPS) ;

END ;

/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值