Oracle 子程序参数模式,IN,OUT,NOCOPY
来源:asp之家 发布时间:2009-10-23 18:08:00
IN主要用于传入参数,可以是变量,常量,表达式,在子程序内部不能改变其值.
代码如下:
DECLARE
n NUMBER := 10;
PROCEDURE do_something (
n1 IN NUMBER) IS
BEGIN
dbms_output.put_line(n1); -- prints 10
--n1:=20; --illegal assignment.
END;
BEGIN
do_something(n);
do_something(20);
END;
OUT模式用于返回值,必须传入变量调用,变量的初始的值不会传给形式参数,如<<1>>所示.
形参的值在子程序返回时(不是在形式参数改变时)才copy给实参, ,如<<2>>所示,如果在 返回之前发生异常,实际参数的值不会被改变.
代码如下:
DECLARE
n NUMBER := 10;
PROCEDURE do_something (
n1 OUT NUMBER) IS
BEGIN
dbms_output.put_line('before assign: ' || n1); -- prints none <<1>>
n1:=20;
dbms_output.put_line('before return: ' || n); -- prints 10 <<2>>
END;
BEGIN
do_something(n);
dbms_output.put_line('after return: ' || n); -- prints 20
END;
NOCOPY模式用于限定OUT模式在调用时是不是以传引用的方式进行(它只是一个编译器暗示,不一定总是起作用),默认情况下,OUT模式的参数是以传值的方式进行调用的.
IN主要用于传入参数的,虽然n2 := 20被调用,但是要到返回的时候才生效.如<<1>>所示.
NOCOPY是传引用,会在赋值的时候立即生效 ,如<<2>>所示,如果在 返回之前发生异常,实际参数的值也会被改变.
由于OUT参数在 子程序返回的时候会将值copy到实际参数,所以调用完后n的值为20,如<<3>>所示.
代码如下:
DECLARE
n NUMBER := 10;
PROCEDURE do_something (
n1 IN NUMBER,
n2 IN OUT NUMBER,
n3 IN OUT NOCOPY NUMBER) IS
BEGIN
n2 := 20;
dbms_output.put_line(n1); -- prints 10<<1>>
n3 := 30;
dbms_output.put_line(n1); -- prints 30 <<2>>
END;
BEGIN
do_something(n, n, n);
dbms_output.put_line(n); -- prints 20 <<3>>
END;
猜你喜欢
- 我们知道,任何数据库系统都无法避免崩溃的状况,即使你使用了Clustered,双机热备……仍然无
- default-character-set=gbk #或gb2312,big5,utf8 然后重新启动mysql 运行->servic
- 1. 准备工作首先编写getHtml函数,传入markdown文本字符串,这里使用fs读取markdown文件内容,返回值是转换过后的字符串
- 目前搜索到的方法有:np.where(‘元素')还有就是pandas的方法:df.index(‘元素')但是第二个方法的问题
- 我们知道 Golang 切片(slice) 在容量不足的情况下会进行扩容,扩容的原理是怎样的呢?是不是每次扩一倍?下面我们结合源码来告诉你答
- 一、前言很多时候,我们都有远程控制电脑的需求。比如正在下载某样东西,需要让电脑在下载完后关机。或者你需要监控一个程序的运行状况等。今天我们就
- 主要作用为指定图片像素:matplotlib.rcParams[‘figure.figsize']#图片像素 matplotlib.
- 听说pytorch使用比TensorFlow简单,加之pytorch现已支持windows,所以今天装了pytorch玩玩,第一件事还是写了
- 个人想到的解决方法有两种,一种是 .replace(' old ',' new ')
- 本文实例讲述了PHP实现断点续传乱序合并文件的方法。分享给大家供大家参考,具体如下:分割成多个文件发送,由于网络原因并不上先发就能发接收到。
- 本文研究的主要是pyqt5自定义信号实例解析的相关内容,具体介绍如下。PyQt5已经自动定义了很多QT内建的信号。但是在实际的使用中为了灵活
- ubuntu上安装mysql非常简单只需要几条命令就可以完成。1. sudo apt-get install mysql-server2.
- 然而有些情况只需要传递几个文件,而且文件体积并不太大,这种情况下使用组件则有点牛刀杀鸡的感觉,通过html自带的<input type
- 本文实例讲述了MySQL中使用replace、regexp进行正则表达式替换的用法。分享给大家供大家参考,具体如下:今天一个朋友问我,如果将
- 本文实例讲述了JS小游戏的象棋暗棋源码,分享给大家供大家参考。具体如下:游戏运行后如下图所示:Javascript 部分:/** chine
- 设计方法曾经是个很尴尬的话题,因为经常看上去很美。专业人士们动手动脚折腾一大圈,出来的结果令人大跌眼镜。也有些设计师总喜欢把方法、概念吹的特
- 创建一个优秀的可视化图表的关键在于引导读者,让他们能理解图表所讲述的故事。在一些情况下,这个故事可以通过纯图像的方式表达,不需要额外添加文字
- 目录一,python介绍二.python的安装程序三、变量python基础部分学习一,python介绍python的创始人为吉多·范罗苏姆(
- 最近因项目需要用ACCESS做数据库开发WEB项目 看论坛上还许多人问及ACCESS被注入的安全问题 许多人解决的方法仍然是用Replace
- 使用指令:pyinstaller -F -w main.py生成的.exe文件执行报错看报错信息,初步怀疑是生成的.exe不能执行.ini配