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
投稿

猜你喜欢

  • php实现二叉树中和为某一值的路径方法

    2023-07-04 20:29:08
  • 用Python实现等级划分

    2022-10-11 23:45:21
  • 在Lighttpd服务器中运行Django应用的方法

    2021-08-05 20:19:50
  • python 从远程服务器下载日志文件的程序

    2021-03-06 01:39:15
  • 解决Python保存文件名太长OSError: [Errno 36] File name too lon

    2021-01-22 06:30:49
  • AI经典书单 人工智能入门该读哪些书?

    2023-06-24 07:11:00
  • Python中实现常量(Const)功能

    2021-01-27 17:16:54
  • python脚本监控Tomcat服务器的方法

    2023-10-03 18:19:23
  • SQL Server中使用sp_password重置SA密码实例

    2024-01-20 15:07:59
  • SQL Server数据库连接查询的种类及其应用

    2009-01-06 11:28:00
  • Advanced SQL Injection with MySQL

    2024-01-24 18:09:24
  • Python入门篇之正则表达式

    2021-10-20 09:01:34
  • 关于xmlhttp乱码的解决方法

    2008-09-24 17:20:00
  • Python机器学习工具scikit-learn的使用笔记

    2021-08-30 10:28:50
  • Python3.6+selenium2.53.6自动化测试_读取excel文件的方法

    2023-04-03 18:41:41
  • MySQL使用ReplicationConnection导致连接失效解决

    2024-01-19 11:04:26
  • python 如何在list中找Topk的数值和索引

    2022-01-20 10:28:27
  • SNS用户体验和互动性浅析

    2011-01-17 17:56:00
  • Python实现简单的语音识别系统

    2022-09-11 04:44:15
  • 将Pytorch模型从CPU转换成GPU的实现方法

    2023-07-07 00:11:00
  • asp之家 网络编程 m.aspxhome.com