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语言中的 ...
最新文章
- IJCAI 2020开幕,杰出论文奖、卓越研究奖、约翰·麦卡锡奖等8项大奖公布 | AI日报...
- linux rz 上传文件夹_第二章Linux服务器环境搭建之Tomcat安装
- Ubuntu 19.10 发布 | 云原生生态周报 Vol. 24
- 自己实现spring核心功能 二
- python online course_python-选课系统
- 【渝粤题库】国家开放大学2021春4010渠道管理答案
- 我们注意到您的计算机目前处于离线状态_你为什么会选择用反渗透设备离线清洗设备?...
- windows下,linux下elasticsearch安装插件marvel插件的步骤
- C# 处理excel 大全
- 《最后的狮子》纪录片观后
- GIS电力平台功能需求
- IP6826无线充电底座方案IC芯片,兼容WPC Qi v1.2.4
- 软件设计模式、目标、原则
- python怎样分析文献综述_怎么写文献综述?
- 会议平板一体机常见触摸屏幕故障分析与解决
- 怎么批量查询银行卡号发卡行等信息?
- 计算机的指令集作用,指令集是
- Java类的初始化和清理
- Web.config配置错误页
- 使用Windows服务启动C#桌面应用程序问题解决
热门文章
- Linux|Qt工作笔记-linux系统下安装qt4.5.3版本的详细步骤
- 反汇编基础-加法的求值过程(各种类型)
- Qt creator5.7 OpenCV249之图片腐化(含源码下载)
- 如何低格台式计算机的硬盘,最新[电脑如何格式化]台式机如何格式化本地磁盘.doc...
- 海狮号水下机器人_供应海狮(SeaLion)ROV水下机器人
- shell与python的优劣_论python 和 shell的实用性
- flutter usb串口_Flutter 调试方式
- 表格 大小_单元格大小乱七八糟?给我3秒,还你一个完美表格!
- python和excell_Python与Excel 不得不说的事情
- android opengl es 绘制位图字体