Oracle 子程序参数模式,IN,OUT,NOCOPY

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;

(0)

相关推荐

  • Oracle中serveroutput参数一次设置永久保存方法

    serveroutput 是sqlplus的配置参数,而不是数据库的配置参数,修改并保存sqlplus的配置参数,那么每次打开sqlplus时就不用重新设置了. 设置方法如下: 1. sql> set serveroutput on 然后,在sqlplus中 2. sql> store set $ORACLE_HOME/sqlplus/admin/glogin.sql replace 完成保存设置. 可以通过如下查看设置效果: SQL> show serveroutput; server

  • Oracle的out参数实例详解

    Oracle的out参数实例详解 一 概念 1.一般来讲,存储过程和存储函数的区别在于存储函数可以有一个返回值:而存储过程没有返回值. 2.过程和函数都可以通过out指定一个或多个输出行.我们可以利用out参数,在过程和函数中实现返回多个值. 3.存储过程和存储函数都可以有out参数. 4.存储过程和存储函数都可以有多个out参数. 5.存储过程可以通过out参数来实现返回值. 6.如果只有一个返回值,用存储函数:否则,就用存储过程. 二 实例 --out参数:查询某个员工姓名月薪和职位 /*

  • 详解Oracle在out参数中访问光标

    详解Oracle在out参数中访问光标 一 概念 申明包结构 包头:负责申明 包体:负责实现 二 需求 查询某个部门中所有员工的所有信息 三 包头 CREATE OR REPLACE PACKAGE MYPACKAGE AS type empcursor isref cursor; procedure queryEmplist(dno in number,emplist out empcursor); END MYPACKAGE; 四 包体 包体需要实现包头中声明的所有方法 CREATE OR

  • Oracle 子程序参数模式,IN,OUT,NOCOPY

    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模式用于

  • oracle的归档模式 ORACLE数据库归档日志常用命令

    --连接恢复管理器 C:\Documents and Settings\mengzhaoliang>rman target/ --归档日志列表 RMAN> list archivelog all; --删除物理文件不存在的归档日志 RMAN> delete expired archivelog all; --删除7天前的归档日志 RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7'; oracle的归档模式 一.查看ora

  • Oracle正则表达式使用介绍

    下面通过一些例子来说明使用正则表达式来处理一些工作中常见的问题. 1. REGEXP_SUBSTR REGEXP_SUBSTR 函数使用正则表达式来指定返回串的起点和终点,返回与source_string 字符集中的VARCHAR2 或CLOB 数据相同的字符串. 语法: --1.REGEXP_SUBSTR与SUBSTR函数相同,返回截取的子字符串 REGEXP_SUBSTR(srcstr, pattern [, position [, occurrence [, match_option]]]

  • SQL数据库与oracle数据库镜像有什么不同对比

    Oracle数据库与MSSQL数据操作上有很大的不同,但是,在镜像操作方面有类比的地方.这篇文章关于MSSQL数据库镜像在Oracle数据库中是如何实现的,它们之间存在哪些差异呢. 首先,微软SQL数据库中的镜像数据库类似于Oracle数据库中的备用数据库.我说的只是类似,确切的说,我们需要考虑不同数据库在自己体系中的差异.MSSQL作为一个实例来操作,一个实例包含几个数据库,你首先要登录一个实例,然后选择哪个数据库作用于该实例.而在Oracle数据库中,简单模式(忽略RAC)就只有一个数据库与

  • Oracle切换为归档模式的步骤及问题解决

    直接如题 查看当前数据库模式 连接进入数据库,键入以下命令: 复制代码 代码如下: SQL> archive log list; 可查看当前数据库的模式,若"数据库日志模式    非存档模式"则有必要进行以下的切换流程. 在切换之前,请确保以下参数的设置 log_archive_dest_n 参数设置归档日志目标,其中n用数字替换.在Oracle9i中n的范围是1~5,在Oracle10g中n可以取值1~10.设置方式如下: 复制代码 代码如下: SQL> alter sy

  • oracle日志操作模式(归档模式和非归档模式的利与弊)

    笔者今天就谈谈自己对这两种操作模式的理解,并且给出一些可行的建议,跟大家一起来提高Oracle数据库的安全性. 一.非归档模式的利与弊. 非归档模式是指不保留重做历史的日志操作模式,只能够用于保护例程失败,而不能够保护介质损坏.如果数据库采用的是日志操作模式的话,则进行日志切换时,新的日志会直接覆盖原有日志文件的内容,不会保留原有日志文件中的数据. 这么说听起来可能比较难理解.笔者举一个简单的例子,就会清楚许多.如现在Oracle数据库中有四个日志组,日志序列号分别为11. 12.13.14.当

  • Oracle数据库 DGbroker三种保护模式的切换

    1.三种保护模式 – Maximum protection 在Maximum protection下, 可以保证从库和主库数据完全一样,做到zero data loss.事务同时在主从两边提交完成,才算事务完成.如果从库宕机或者网络出现问题,主从库不能通讯,主库也立即宕机.在这种方式下,具有最高的保护等级.但是这种模式对主库性能影响很大,要求高速的网络连接. – Maximum availability 在Maximum availability模式下,如果和从库的连接正常,运行方式等同Maxi

  • Oracle的RBO和CBO详细介绍和优化模式设置方法

    Oracle的优化器有两种优化方式,即基于规则的优化方式(Rule-Based Optimization,简称为RBO)和基于代价的优化方式(Cost-Based Optimization,简称为CBO),在Oracle8及以后的版本,Oracle强列推荐用CBO的方式 RBO方式:优化器在分析SQL语句时,所遵循的是Oracle内部预定的一些规则.比如我们常见的,当一个where子句中的一列有索引时去走索引. CBO方式:它是看语句的代价(Cost),这里的代价主要指Cpu和内存.优化器在判断

  • Oracle开启和关闭的四种模式

    >1 启动数据库 在cmd命令窗口,直接输入"sqlplus",直接进入oracle管理界面,输入用户名和密码后,开始启动数据库,启动数据库三个步骤:启动实例.加载数据库.打开数据库 命令格式: startup [nomount|mount|open|force][restrict][pfile=filename] nomount:表示启动实例不加载数据库 mount:表示启动实例.加载数据库并保持数据库的关闭状态 open:表示启动实例.加载并打开数据库,这个是默认选项 for

  • Oracle控制文件丢失恢复归档模式

    目录 一.查看控制文件路径和内容 二.模拟控制文件丢失情况: 1.未丢失全部控制文件 2.全部丢失,控制文件存在备份 通过备份文件重建控制文件 通过rman恢复控制文件 3.全部丢失,没有备份 三.建议 一.查看控制文件路径和内容 SQL> show parameter control_files NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ cont

随机推荐