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;

标签:Oracle,子程序,参数模式
0
投稿

猜你喜欢

  • asp经典入门教程 在ASP中使用SQL 语句

    2013-06-01 20:23:21
  • 20个优秀网站助你征服CSS[译]

    2008-09-21 13:21:00
  • css学习笔记:DIV水平垂直居中

    2009-06-19 12:45:00
  • 20个Javascript手风琴折叠菜单

    2009-10-12 12:09:00
  • 手机版远程网站文件删除ASP程序

    2009-02-24 16:23:00
  • 有效地使用 SQL事件探查器的提示和技巧

    2009-01-15 13:39:00
  • 巧用MySQL InnoDB引擎锁机制解决死锁问题

    2008-12-19 17:24:00
  • 什么是JSON及JSON的结构

    2008-06-15 07:16:00
  • asp提高首页性能的一个技巧

    2008-04-05 06:54:00
  • 网马解密大讲堂——网马解密中级篇(Freshow工具使用方法)

    2009-09-16 15:09:00
  • JavaScript caller与callee属性

    2009-01-19 13:39:00
  • 仿豆瓣分页原型(Javascript版)

    2007-11-05 14:04:00
  • 利用css的clear属性搞定广告文字环绕效果

    2008-05-24 13:48:00
  • SQLServer与服务器连接时出错的解决方案

    2009-06-28 14:35:00
  • Oracle SQL性能优化系列学习三

    2010-07-23 13:08:00
  • CSS在Internet Explorer 6, 7 和8中的差别

    2009-10-26 18:14:00
  • ASP实例:幻灯片新闻代码

    2008-11-21 17:40:00
  • MS SQL7.0的数据迁移到MySQL上的一种方法

    2008-11-01 16:59:00
  • SqlServer参数化查询之where in和like实现之xml和DataTable传参介绍

    2012-05-22 18:38:49
  • oracle 彻底删除方法

    2009-07-02 12:22:00
  • asp之家 网络编程 m.aspxhome.com