PL/SQL NOCOPY限制模式
NOCOPY模式用于限定OUT模式和IN OUT模式在调用时是不是以传引用的方式进行。 默认情况下,OUT模式和IN OUT模式的参数是以传值的方式进行调用的。 IN模式总是以传引用的方式,如果用NOCOPY限制会报错。传值就是将实参的值复制到形参。(因为复制,速度会没有传引用快) 传引用就意味着将实参的值的一个指针传递到相应的参数,形参改变实参也会立即被改变。(这些在C指针中讲的比较好)
--NOCOPY限制的OUT模式 create or replace procedure RaiseErrorCopy(p_Raise in boolean,p_ParameterA out nocopy number --将传值用NOCOPY限制为传引用)as beginp_ParameterA:=7;if p_Raise thenraise dup_val_on_index;elsereturn;end if; end RaiseErrorCopy;--测试效果 v_num:=1; beginDBMS_OUTPUT.PUT_LINE('Value before first call: '||v_num);RaiseErrorCopy(FALSE,v_num); DBMS_OUTPUT.PUT_LINE('Value after sucessful call: '||v_num);DBMS_OUTPUT.PUT_LINE('');v_num:=2;DBMS_OUTPUT.PUT_LINE('Value before second call: '||v_num);RaiseErrorCopy(True,v_num);exceptionwhen others thenDBMS_OUTPUT.PUT_LINE('Value after unsucessful call: '||v_num); end;Value before first call: 1 Value after sucessful call: 7 Value before second call:2 Value after unsucessful call:7 --即使没有完全成功,但是实参值也因形参改变而立即改变了
如果没有NOCOPY限制。结果将会是:
Value before first call: 1 Value after sucessful call: 7 Value before second call:2 Value after unsucessful call:2 --只有当程序正常结束时,赋给OUT或者IN OUT类型参数的值才会返回
NOCOPY的主要优点是它可以提高程序性能。传递大型数组的时候,这一点尤为突出当我们声明一个参数是IN类型时,进行传参是将传给该参数一个实参的指针; 当我们声明一个参数是OUT或者IN OUT类型时,进行传参是将传给该参数一个实参的拷贝; 只有当程序正常结束时,赋给OUT或者IN OUT类型参数的值才会返回(除非使用了NOCOPY)。 将NOCOPY应用在传递数据量很大的参数(such as collections, records, and instances of object types)时,可起到优化性能的作用。 当参数是OUT或者IN OUT类型时:没有NOCOPY=按值传递(ByVal);加上NOCOPY=按引用传递(ByRef)http://blog.csdn.net/kkdelta/article/details/4698399 http://www.cnblogs.com/qianwen/p/3769665.html PL/SQL Programming Scott Urman
转载于:https://www.cnblogs.com/qianwen/p/3769815.html
PL/SQL NOCOPY限制模式相关推荐
- 金仓数据库KingbaseES数据库开发指南(4. 面向应用程序的PL/SQL开发)
目录 4.1. PL/SQL子程序和包的编写 ¶ 4.1.1. PL/SQL 子程序概述 ¶ 4.1.2. PL/SQL 包概述 ¶ 4.1.3. PL/SQL 单元概述 ¶ 4.1.4. 创建 PL ...
- Oracle 12c中增强的PL/SQL功能
英文链接:http://www.oracle.com/technetwork/issue-archive/2013/13-sep/o53plsql-1999801.html Oracle 12c增强了 ...
- 每周一书《Oracle 12 c PL(SQL)程序设计终极指南》
本周为大家送出的书是<Oracle 12 c PL(SQL)程序设计终极指南>,此书由机械工业出版社出版, 孙风栋,王澜,郭晓惠 著. 内容简介: <Oracle 12c PL/SQ ...
- sql如何遍历几百万的表_Oracle PL/SQL调优技巧分享
原创作者:如人饮水冷暖自知 责任编辑:AcDante 前言 开门见山,今天和大家聊聊如何对PL/SQL代码进行优化,以及如何编写高效的PL/SQL代码,如果您是开发DBA,或者您是数据库开 发人员,对 ...
- PL/SQL详细介绍
PL/SQL笔记 PL/SQL块中只能直接嵌入SELECT,DML(INSERT,UPDATE,DELETE)以及事务控制语句(COMMIT,ROLLBACK,SAVEPOINT),而不能直接嵌入DD ...
- oracle pl/sql 基础
PL/SQL笔记 PL/SQL块中只能直接嵌入SELECT,DML(INSERT,UPDATE,DELETE)以及事务控制语句(COMMIT,ROLLBACK,SAVEPOINT),而不能直接嵌入DD ...
- PL/SQL Developer(解压版)连接64位的Oracle11g
PL/SQL Developer(解压版)连接64位的Oracle11g 在Windows 64位系统上安装64位的Oracle数据库,但是没有对应的64位PL/SQL Developer,此时要用P ...
- oracle pl/sql 程序设计 历史笔记整理
20131016 周三 oracle pl/sql 程序设计 第2章 创建并运行pl/sql代码 sqlplus yjkhecc/yjkhecc@10.85.23.92:1521/orcl 在java ...
- PL/SQL程序设计 第七章 包的创建和应用
§7.1 引言 包是一组相关过程.函数.变量.常量和游标等PL/SQL程序设计元素的组合,它具有面向对象程序设计语言的特点,是对这些PL/SQL 程序设计元素的封装.包类似于C++和JAVA语言中的 ...
最新文章
- Linux命令基础6-mkdir命令
- 负载均衡中的服务器健康检查
- 如何在GridView中使用DataFromatString [转]
- (~最新合集~)计算机网络谢希仁第七版 第五章课后答案
- 说说 C# 9 新特性的实际运用
- P3938 斐波那契
- 测试功能范围_软件测试难学吗?
- c语言的运算符有那哪些,c语言逻辑运算符有哪些
- 小白新手web开发简单总结(三)-一个简单的Web开发项目
- Android术语查询软件,术语在线app_术语在线查询_学术术语在线-多特软件站安卓网...
- 基于N-gram的双向最大匹配中文分词
- 网易互娱2017实习生招聘游戏研发工程师在线笔试第二场(一起消消毒)
- TPM分析笔记(一) TPM历史
- css border实现图形
- Java中三种代理方式—— 静态代理与两种动态代理的实现机制
- sqlserver 日期比较
- unity5.x游戏开发指南——4、5、6章
- vue+element上传图片到阿里云(可直接运行domo)
- 利用EL表达式替换回车符
- Verilog实现Bresenham任意斜率直线
热门文章
- url中 斜杠如何传输_如何在父子页面中传输数据(layer)
- Java笔记-模拟QQ三方登录(单点登录2.0)
- Flask笔记-session安全问题(避免任务重复提交)
- C++设计模式-面向对象程序设计要点以及封装性特点
- cholesky分解java代码_Cholesky 分解(转)
- r语言 线性回归 相关系数_基于R语言的lmer混合线性回归模型
- MyBatisPlus自动生成代码springboot+mybatis+mysql 以及动态sql生成方法(测试可用版)
- 第一章:Python的基本数据类型-第三节:Python中表示“无序”的数据类型
- (王道408考研操作系统)第二章进程管理-第三节1:进程同步与互斥的基本概念
- 基础编程题之最大连续bit数(位运算)