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限制模式相关推荐

  1. 金仓数据库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 ...

  2. Oracle 12c中增强的PL/SQL功能

    英文链接:http://www.oracle.com/technetwork/issue-archive/2013/13-sep/o53plsql-1999801.html Oracle 12c增强了 ...

  3. 每周一书《Oracle 12 c PL(SQL)程序设计终极指南》

    本周为大家送出的书是<Oracle 12 c PL(SQL)程序设计终极指南>,此书由机械工业出版社出版, 孙风栋,王澜,郭晓惠 著. 内容简介: <Oracle 12c PL/SQ ...

  4. sql如何遍历几百万的表_Oracle PL/SQL调优技巧分享

    原创作者:如人饮水冷暖自知 责任编辑:AcDante 前言 开门见山,今天和大家聊聊如何对PL/SQL代码进行优化,以及如何编写高效的PL/SQL代码,如果您是开发DBA,或者您是数据库开 发人员,对 ...

  5. PL/SQL详细介绍

    PL/SQL笔记 PL/SQL块中只能直接嵌入SELECT,DML(INSERT,UPDATE,DELETE)以及事务控制语句(COMMIT,ROLLBACK,SAVEPOINT),而不能直接嵌入DD ...

  6. oracle pl/sql 基础

    PL/SQL笔记 PL/SQL块中只能直接嵌入SELECT,DML(INSERT,UPDATE,DELETE)以及事务控制语句(COMMIT,ROLLBACK,SAVEPOINT),而不能直接嵌入DD ...

  7. PL/SQL Developer(解压版)连接64位的Oracle11g

    PL/SQL Developer(解压版)连接64位的Oracle11g 在Windows 64位系统上安装64位的Oracle数据库,但是没有对应的64位PL/SQL Developer,此时要用P ...

  8. oracle pl/sql 程序设计 历史笔记整理

    20131016 周三 oracle pl/sql 程序设计 第2章 创建并运行pl/sql代码 sqlplus yjkhecc/yjkhecc@10.85.23.92:1521/orcl 在java ...

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

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

最新文章

  1. IJCAI 2020开幕,杰出论文奖、卓越研究奖、约翰·麦卡锡奖等8项大奖公布 | AI日报...
  2. linux rz 上传文件夹_第二章Linux服务器环境搭建之Tomcat安装
  3. Ubuntu 19.10 发布 | 云原生生态周报 Vol. 24
  4. 自己实现spring核心功能 二
  5. python online course_python-选课系统
  6. 【渝粤题库】国家开放大学2021春4010渠道管理答案
  7. 我们注意到您的计算机目前处于离线状态_你为什么会选择用反渗透设备离线清洗设备?...
  8. windows下,linux下elasticsearch安装插件marvel插件的步骤
  9. C# 处理excel 大全
  10. 《最后的狮子》纪录片观后
  11. GIS电力平台功能需求
  12. IP6826无线充电底座方案IC芯片,兼容WPC Qi v1.2.4
  13. 软件设计模式、目标、原则
  14. python怎样分析文献综述_怎么写文献综述?
  15. 会议平板一体机常见触摸屏幕故障分析与解决
  16. 怎么批量查询银行卡号发卡行等信息?
  17. 计算机的指令集作用,指令集是
  18. Java类的初始化和清理
  19. Web.config配置错误页
  20. 使用Windows服务启动C#桌面应用程序问题解决

热门文章

  1. Linux|Qt工作笔记-linux系统下安装qt4.5.3版本的详细步骤
  2. 反汇编基础-加法的求值过程(各种类型)
  3. Qt creator5.7 OpenCV249之图片腐化(含源码下载)
  4. 如何低格台式计算机的硬盘,最新[电脑如何格式化]台式机如何格式化本地磁盘.doc...
  5. 海狮号水下机器人_供应海狮(SeaLion)ROV水下机器人
  6. shell与python的优劣_论python 和 shell的实用性
  7. flutter usb串口_Flutter 调试方式
  8. 表格 大小_单元格大小乱七八糟?给我3秒,还你一个完美表格!
  9. python和excell_Python与Excel 不得不说的事情
  10. android opengl es 绘制位图字体