NOCOPY之使用限制

 众所周知,在声明子程序时,可以将NOCOPY关键字冠之于IN及IN OUT参数,以使得子程序调用时,改变默认的传参方式(按值传递),使用按地址传递的方式,这在处理数据量较大的参数时(如大的集合类型变量)比较有效,能显著提高PL/SQL程序的运行性能。但NOCOPY并非指令,它只是一个编译提示(hint),在下列这些情况下这个提示将会无效:
  1. 当实参是关联数组(associative array)的一个元素时。若实参是一个完整的关联数组,NOCOPY有效(NOCOPY就是用来处理这些大的集合类型的)。
  2. 当实参对应的数据类型有约束时,比如定义实参变量时使用了NOT NULL关键字,NUMBER变量定义了SCALE等。不过,实参若是长度受限的字符串,或实参只是元素或属性有约束的组合类型(集合类型、对象类型),则NOCOPY却是有效的。
  3. 当实参与形参都是记录类型,然而其中一个或两个使用了%TYPE或%ROWTYPE来声明,并且某些对应字段有不同的约束时。
  4. 当实参与形参都是记录类型,实参是游标FOR循环的索引变量(实质也是一个%ROWTYPE记录类型变量),并且实参与形参的某些对应字段有不同的约束时。
  5. 当实参向形参传递需要做隐式的数据类型转换时。
  6. 当通过一个数据库链接(database link)来调用一个子程序时,或者被调用的子程序是一个外部存储过程。外部存储过程指的是非PL/SQL语言(C,JAVA...)定义的子程序或类方法,通过CREATE PROCEDURE...AS LANGUAGE...NAME...将其引入ORACLE中来使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值