PL/SQL中对out,in out参数使用的?默认形参会复制一份实参的副本,然后在内部传递,修改等,发生异常,不会赋值给实参,控制权交还调用环境,而实参值不变,还是调用前的值。而使用了NOCOPY后,形参将获得一个指向实参的指针,然后在内部传递,赋值都直接修改实参了,此时如果异常发生,控制权交还调用环境,但是实参已经被修改了。无法还原成调用前的值。
对参数I N使用NOCOPY将会产生编译错误,这是因为参数I N总是按引用传递.
NOCOPY的主要优点是可以提高程序的效率。当我们传递大型PL/SQL表时,其优越性特别显著.使用NOCOPY的限制在某些情况下,NOCOPY将被编译器忽略,这时的参数仍将按值传递。这时,编译器不会报告编译错误。由于NOCOPY是一个提示项(Hint),编译器可以决定是否执行该项。在下列情况下,编译器将忽略NOCOPY项:
1.实参是索引表(index-by table)的成员时。如果该实参是全表,则该限制不起作用。
2.实参被强制指定精度,比例或NOT NULL时。该限制将不适用按最大长度强制的字符串参数。
3.实参和形参都是记录类型,二者是以隐含方式或使用了%ROWTYPE类型声明时,作用在对应字段的强制说明不一致。
4.传递实参需要隐式类型转换时。
5.子程序涉及到远程过程调用(PRC)。远程过程调用就是跨越数据库对远程服务器的过程调用。
分享到:
相关推荐
总结起来,Oracle 子程序参数模式IN、OUT和NOCOPY提供了灵活的数据传递机制,IN用于单向传递数据,OUT用于传出结果,而NOCOPY则是在OUT基础上尝试优化性能的一种方式,允许子程序直接修改调用者的变量。了解和正确...
Oracle P/L SQL实现FTP上传、下载功能,以下是此过程包的头部,包体经常打包处理plb,感兴趣用户可以下载下来。 --Oracle上的FTP功能 Create or Replace Package UTL_FTP AUTHID CURRENT_USER as Type Connection ...
### Oracle 创建wm_concat函数 #### 知识点一:Oracle 10G及以下版本的wm_concat函数自定义实现 在Oracle 10G及更早版本中,并没有内置的`wm_concat`函数,该函数主要用于对一组字符串进行连接操作。为了在这些...
geometry IN OUT NOCOPY MDSYS.SDO_GEOMETRY, from_srs_id IN NUMBER, to_srs_id IN NUMBER ) ``` - `geometry`: 需要转换的几何对象。 - `from_srs_id`: 当前几何对象所在的坐标系统ID。 - `to_srs_id`: 目标...
parameter_list IN OUT NOCOPY PARAM_LIST, return_code OUT NUMBER, return_message OUT VARCHAR2); ``` 其中,`report_name`是报表的名称,`parameter_list`用于传递报表所需的参数,`return_code`和`...
Oracle 常用命令举例 标题 基本语法 %type用法,%rowtype用法,TYPE用法 游标的使用 for 循环 loop循环 while循环 if / else 的用法 case 的用法 标题 错误定义 error的设定 exception用法 ...
### Oracle PL/SQL编程最佳实践知识点汇总 #### 概述 - **目标**: 提供一套完整的Oracle PL/SQL编程指导原则。 - **适用对象**: 面向所有使用Oracle数据库进行开发的技术人员。 #### 规范 - **命名规则**: - ...
- 在PL/SQL中,变量需要先声明后使用,可以使用`:=`进行赋值,也可以通过`IN OUT`或`IN OUT NOCOPY`参数传递变量。 4. **流程控制** - 控制流程的结构包括IF-THEN-ELSIF-ELSE、CASE、FOR循环、WHILE循环、GOTO和 ...
- `NOCOPY`:当参数类型为`INOUT`时,使用`NOCOPY`关键字可避免复制参数的值,从而节省内存资源。 - **权限管理**: - `AUTHID CURRENT_USER`:表示存储过程内的操作权限与当前执行用户相同。 - `AUTHID DEFINER...
根据提供的文件信息,我们可以深入探讨Oracle PL/SQL性能调优中的关键知识点,这些知识点主要集中在“编码实践”和“系统配置”两个方面。 ### 一、编码实践 #### 数值数据类型的选择 在PL/SQL中,数值数据类型的...
### Oracle Stream + AQ + JMS 搭建详解 #### 一、背景及目标 在当前数据密集型应用环境中,数据库变更数据的实时捕获与处理变得尤为重要。Oracle Stream技术结合Oracle的高级队列(Advanced Queuing, AQ)以及...
Oracle中的PL/SQL应用优化是数据库管理中一个关键的话题,主要关注如何提高代码执行效率和减少资源消耗。本文档详细探讨了多个与PL/SQL优化相关的主题,包括数据类型的选取、语句建议、批量处理、新SQL语句的使用...
- **NOCOPY:** 标志,表明参数不应被复制。 - **AUTHID:** 定义执行权限类型。 **示例:** ```sql CREATE OR REPLACE PROCEDURE sam.credit ( acc_no IN NUMBER, amount IN NUMBER ) AS BEGIN UPDATE ...
我们可以发现合理选择数据类型、有效利用变量声明和NOT NULL约束、恰当使用NOCOPY选项、灵活运用动态SQL、批量处理、表函数和管道表函数等技术手段,都是提升Oracle数据库应用性能的重要途径。希望本文能为正在从事...
- `CREATE OR REPLACE PROCEDURE procedure_name (param1 IN/OUT/NOCOPY datatype, ...) AS ... BEGIN ... END;` 六、备份与恢复 1. 数据泵导出(EXPDP): - `expdp username/password directory=dir_name dump...
### Oracle PL/SQL调优知识点详解 #### 一、序言 在开始深入探讨Oracle PL/SQL调优之前,我们先来简要回顾一下讲座的背景与环境设置。本讲座面向具备一定PL/SQL基础知识的听众,主要内容涵盖编程技巧与系统配置两大...
在Oracle数据库中,存储过程是预编译的SQL语句集合,它们被组织在一起作为一个可重用的单元,便于管理和执行。查看系统存储过程是数据库管理员和开发人员日常任务的一部分,这有助于理解数据库的运作机制,排查问题...
Oracle PL/SQL 子程序和包的概念和应用 本章要点: * 理解子程序(过程、函数)及包的概念 * 掌握如何创建、执行和删除过程、函数及包的方法 * 了解形参和实参的区别以及不同参数模式的特征 * 灵活使用过程、函数...
3. **使用NOCOPY编译器选项**:对于大型对象或集合类型的参数,使用`NOCOPY`可以减少参数传递时的开销,通过引用传递而不是值传递来提高性能。 在实际开发中,理解这些原则和技巧对于编写高效、灵活的Oracle动态SQL...