今天在研究xlsx_builder_pkg包的时候,看到了hextoraw函数,进而发现了utl_raw包。在包头中看到了这样一种语句:
pragma RESTRICT_REFERENCES(copies, WNDS, RNDS, WNPS, RNPS);
简单搜索了一下,是这样一种用法:
PRAGMA RESTRICT_REFERENCES ( subprogram_name, [RNDS, WNDS, RNPS, WNPS, TRUST])
关键字和参数描述:
PRAGMA: 表示这是一个编译指令,在编译的时候执行
subprogram_name: PL/SQL 函数的名字
RNDS: (Read No Database State) 表示该subprogram不会查询(query)数据库中的表。
WNDS: (Write No Database State) 表示该subprogram不会改变数据库中的表的数据。
RNPS: (Read No Package State) 不访问包中的变量
WNPS:(Write No Package State) 不改变包中的变量值
TRUST: 表示信任该subprogram不会违反前面的任何约束,一般用在PL/SQL调用外部函数,比如java代码。
create or replace package pkg_zy_Test is
function func_test_res(para number) return number;
pragma restrict_references(func_test_res,rnps);
end pkg_zy_Test;
/
create or replace package body pkg_zy_Test is
v_value number:=0;
function func_test_res(para number) return number is
v_value0 number;
begin
v_value0:=v_value;
end;
begin
null;
end pkg_zy_Test;
/
编译报错:
Compilation errors for PACKAGE BODY IRMDEV2.PKG_ZY_TEST
Error: PLS-00452: Subprogram ‘FUNC_TEST_RES’ violates its associated pragma
个人总结来说,pragma restrict_references就是一个约束函数对于表、变量权限的限制。