PL/SQL:使用pragma restrict_references限制包权限
来源:互联网 发布:手机破解软件网站大全 编辑:程序博客网 时间:2024/05/17 04:47
在看别人的代码的时候,发现了如下的编译指令,
get_attribute_name是一个pl/sql function, 当我试图在这个函数中往一个log表里面插入log信息的时候,编译都通不过,给出如下信息,
看来就是上面这个pragma搞得鬼。 查了下Oracle 文档, (http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/restrictreferences_pragma.htm#LNPLS01339)
才知道这个pragma的作用是保证上面的那个function,不会改变数据库的状态 wnds (Write No Database State), 而我却在这个函数的内部进行了写表操作,难怪为编译出错。
RESTRICT_REFERENCES pragma的用法如下:
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代码。
需要注意的是, RESTRICT_REFERENCES pragma只能出现在package specification 或者 object type specification.
下面是一个简单的例子:
CREATE PACKAGE loans AS
FUNCTION credit_ok RETURN BOOLEAN;
PRAGMA RESTRICT_REFERENCES (credit_ok, WNDS, RNPS);
END loans;
/
- PL/SQL:使用pragma restrict_references限制包权限
- pragma restrict_references
- Oracle PRAGMA RESTRICT_REFERENCES 理解
- 关于PRAGMA RESTRICT_REFERENCES 的理解
- PRAGMA RESTRICT_REFERENCES(getFormat, WNDS, WNPS, RNDS, RNPS);
- pragma autonomous_transaction : restrict_references(<fuctionname>,wnds) and serially_resumable
- PL/SQL --> DBMS_DDL包的使用
- PL/SQL:学会使用DBMS_JOB包
- PL/SQL:DBMS_PIPE包的使用
- PL/SQL-->UTL_FILE包的使用介绍
- PL/SQL-->DBMS_DDL包的使用
- PL/SQL:DBMS_PIPE包的使用
- PL/SQL包2(使用包重载)
- PL/SQL包3(使用包构造过程)
- 使用PL/SQL内置的DBMS_SQL包执行动态SQL
- PL/SQL包
- pl/sql开发包
- PL/SQL-包
- 将多个war包打成ear包部署was
- VTK5.10.1+Cmake+vs2010整合安装
- Gradle的简介与安装
- 测试
- HTTP GET/POST方法对比
- PL/SQL:使用pragma restrict_references限制包权限
- 几款好的markdown编辑器
- Java简单实现Socket非阻塞通信
- C#读写注册表
- 【RAC】rac环境下的数据库备份与还原
- android Button美化
- 简明python教程:第3章 最初的步骤
- C程序编译过程浅析
- 看了这么多少关于设计模式的知识,下面我说说自己的看法吧。