在看别人的代码的时候。发现了例如以下的编译指令。

pragma restrict_references(get_attribute_name, wnds);

get_attribute_name是一个pl/sql function, 当我试图在这个函数中往一个log表里面插入log信息的时候。编译都通只是,给出例如以下信息,

Error(2252,1): PLS-00452: Subprogram 'GET_AMOUNT_NAME' violates its associated pragma 

看来就是上面这个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])

keyword和參数描写叙述:

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;
/

本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5333219.html,如需转载请自行联系原作者

PL/SQL:使用pragma restrict_references限制包权限相关推荐

  1. PL/SQL程序设计 第七章 包的创建和应用

    §7.1  引言 包是一组相关过程.函数.变量.常量和游标等PL/SQL程序设计元素的组合,它具有面向对象程序设计语言的特点,是对这些PL/SQL 程序设计元素的封装.包类似于C++和JAVA语言中的 ...

  2. oracle 读取ldap数据库,Oracle PL/SQL管理LDAP服务器(DBMS_LDAP包的使用)

    了解LDAP LDAP是Light Directory Access Protocol轻量级目录访问协议的简称,LDAP与数据库有很大的区别,它的数据是树状的,而且每个节点的属性也比较固定. LDAP ...

  3. [强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)...

    [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天才在于积累!) --通过知识共享树立个人品牌.   继上七篇:            [推荐]ORACLE P ...

  4. 第七章 控制PL/SQL错误

    一.错误控制一览 在PL/SQL中,警告或错误被称为异常.异常可以是内部(运行时系统)定义的或是用户定义的.内部定义的案例包括除零操作和内存溢出等.一些常见的内部异常都有一个预定义的名字,如ZERO_ ...

  5. ORACLE PL/SQL编程

    PL/SQL程序设计 什么是PL/SQL PL/SQL是 Procedure Language & Structured Query Language 的缩写.PL/SQL是对SQL语言存储过 ...

  6. 第十章 PL/SQL对象类型

    第十章 PL/SQL对象类型 一.抽象的角色 抽象是对一个真实世界实体的高级描述或建模.它能排除掉无关的细节内容,使我们的日常生活更有条理.例如,驾驶一辆汽车时,我们是不需要知道它的发 动机是如何工作 ...

  7. 第十章 PL/SQL对象类型 ( 1 )

    第十章 PL/SQL对象类型 一.抽象的角色 抽象是对一个真实世界实体的高级描述或建模.它能排除掉无关的细节内容,使我们的日常生活更有条理.例如,驾驶一辆汽车时,我们是不需要知道它的发动机是如何工作的 ...

  8. JAVA_WEB Oracle 10g学习: PL/SQL与Oracle间交互

    一.抽象的角色 抽象是对一个真实世界实体的高级描述或建模.它能排除掉无关的细节内容,使我们的日常生活更有条理.例如,驾驶一辆汽车时,我们是不需要知道它的发动机是如何工作的.由变速排档.方向盘.加速器和 ...

  9. 第六章 PL/SQL与Oracle间交互

    第六章 PL/SQL与Oracle间交互 一.PL/SQL支持的SQL一览 PL/SQL扩展了SQL,变得更加强大和易用.我们可以用PL/SQL灵活安全地操作Oracle数据,因为它支持所有的SQL数 ...

最新文章

  1. python实现gauss-seidel迭代公式_python实现高斯(Gauss)迭代法的例子
  2. Java 线程池(ThreadPoolExecutor)原理分析与使用
  3. USTC English Club Note20171023(2)
  4. java链表list_数据结构-List:使用Java实现双向链表LinkedList
  5. python替换excel指定字符串_【python】替换指定内容,excel数据预处理
  6. 英语语法---主语详解
  7. 机器学习导论�_机器学习导论
  8. Flutter之Decoration
  9. vue 跨域问题 - 总结篇
  10. linux mysql ssh通道_通过SSH通道来访问MySQL
  11. java中多线程重要吗_Java基础知识_多线程必要知识点
  12. 25. 单体内置对象
  13. 基于Linux的集群系统(三)
  14. sqlserver常用语法
  15. Geotools解析shp文件
  16. tune声场测试软件_(整理)SmaartLive实用声场测试软件的规范使用.
  17. android蜂巢效果、环形菜单、Kotlin影视应用、简约时钟、查看导出App、支付宝AR扫码效果等源码...
  18. 计算机系统概论(原书第2版)完整课后习题答案(一、二章)
  19. 服务器集群虚拟化区别,服务器集群与虚拟化
  20. 刘严涛一枚天蝎座的在读大学生

热门文章

  1. Spring MVC ajax:post/get 的具体实现
  2. 当AD服务器置于防火墙内时,所需开放的端口
  3. 你应该在开始API开发之前知道的事(下)(翻译)
  4. 莎拉波顿,莎曼莎考克斯——英伦设计VS美国设计
  5. 访谈实录:网管员如何踏上高薪之路(1)
  6. Repeater控件的使用
  7. I need to follow my heart.
  8. [Linux]Shell的运算符和特殊变量
  9. Activity的启动模式与flag详解
  10. [PHP] 自动加载的实现