PL/SQL子程序存储过程IN,OUT,IN OUT参数模式详解
来源:互联网 发布:众人匹之 不亦悲乎 编辑:程序博客网 时间:2024/05/29 09:13
PL/SQL存储过程的形式参数模式有三种,分别是IN、OUT、IN OUT,三种模式详解如下,结合后面代码看更容易理解。
IN模式的形参只能进行读操作,对其进行赋值(写操作)会出现编译错误,如下图;
以下代码p_InParameter、p_OutParameter、p_InOutParameter为形参,v_In、v_Out、v_InOut为相应的实参。以下结合三种情况进行分析
1.实参v_Out调用过程后输出为7而不是2(结果看【调试执行结果:】图),因为在过程对相应的形参进行了写操作p_OutParameter := 7,过程结束返回调用环境后形参的值赋给了实参;
2.若把paramodetest存储过程内的写操作p_OutParameter := 7注释掉,则最后v_Out的值为空,如下图结果。可根据模式详解表格自行分析
3.若把paramodetest存储过程内的写操作p_InOutParameter := 8注释掉,则最后v_InOut的值3,如下图结果。因为形参p_InOutParameter 为IN OUT模式,实参v_InOut=3会把值传递给形参,在过程内,形参就像初始化了的变量。期间,形参没有被赋值没有发生改变(写操作注释掉了),最后形参p_InOutParameter =3就会赋给实参。
【测试 调用paramodetest存储过程代码:】
declare v_In number := 1; v_Out number :=2; v_InOut number :=3;begin dbms_output.put_line('未调用过程前【实参】的输出:'); dbms_output.put_line('v_In = '|| v_In ||'; v_Out = '||v_Out|| '; v_InOut = '||v_InOut); --未调用过程前【实参】的输出: --v_In = 1; v_Out = 2; v_InOut = 3 paramodetest(v_In, v_Out, v_InOut); dbms_output.put_line('调用过程后【实参】的输出:'); dbms_output.put_line('v_In = '|| v_In ||'; v_Out = '||v_Out|| '; v_InOut = '||v_InOut); --调用过程后【实参】的输出: --v_In = 1; v_Out = 7; v_InOut = 8end;【调试执行结果:】
【paramodetest存储过程代码:】
CREATE OR REPLACE PROCEDURE paramodetest(p_InParameter IN NUMBER, p_OutParameter OUT NUMBER, p_InOutParameter IN OUT NUMBER) IS v_LocalVariable NUMBER := 0;BEGIN dbms_output.put_line('---未对存储过程【形参】读写操作前【形参】的输出:---'); if (p_InParameter is null) then dbms_output.put('p_InParameter is null;'); else dbms_output.put('p_InParameter = ' || p_InParameter || ';'); end if; if (p_OutParameter is null) then dbms_output.put('p_OutParameter is null;'); else dbms_output.put('p_OutParameter = ' || p_OutParameter || ';'); end if; if (p_InOutParameter is null) then dbms_output.put_line('p_InOutParameter is null'); else dbms_output.put_line('p_InOutParameter = ' || p_InOutParameter); end if; v_LocalVariable := p_InParameter; --读参数 --p_InParameter := 7; --写参数 会出现编译错误,此处屏蔽掉 v_LocalVariable := p_OutParameter; --读参数 p_OutParameter := 7; --写参数 v_LocalVariable := p_InOutParameter; --读参数 p_InOutParameter := 8; --写参数 dbms_output.put_line('---对存储过程【形参】读写操作后【形参】的输出:---'); if (p_InParameter is null) then dbms_output.put('p_InParameter is null;'); else dbms_output.put('p_InParameter = ' || p_InParameter || ';'); end if; if (p_OutParameter is null) then dbms_output.put('p_OutParameter is null;'); else dbms_output.put('p_OutParameter = ' || p_OutParameter || ';'); end if; if (p_InOutParameter is null) then dbms_output.put_line('p_InOutParameter is null'); else dbms_output.put_line('p_InOutParameter = ' || p_InOutParameter); end if;END paramodeltest;
有任何问题欢迎讨论交流~
注:文章程序代码来自《oracle 10g 数据库基础教程(第2版)》
阅读全文
0 0
- PL/SQL子程序存储过程IN,OUT,IN OUT参数模式详解
- Oracle存储过程in、out、in out 模式参数
- Oracle存储过程in、out、in out 模式参数
- Oracle 子程序参数模式,IN,OUT,NOCOPY
- Oracle 子程序参数模式,IN,OUT,NOCOPY
- oracle存储过程IN,OUT,IN OUT参数
- oracle 存储过程in out inout三种参数模式
- oracle 存储过程in out inout三种参数模式
- MySql(15)------mysql存储过程IN,OUT,INOUT参数模式使用详解
- 存储过程in和out
- oracle存储过程--参数类型研究(in,out,in out)
- oracle 存储过程 参数(in | out | in out)的使用
- MySQL 存储过程参数用法 in, out, inout
- mysql存储过程中参数的in,out,inout区别
- MySQL:MySQL 存储过程参数用法 in, out, inout
- oracle调用带in out参数的存储过程
- MySQL 存储过程参数用法 in, out, inout(转)
- 【mysql】mysql存储过程in、out、inout参数使用
- 浅谈HTTP协议
- AndroidStudio SVN 使用笔记
- 一步步带你做vue后台管理框架(二)——上手使用
- highcharts 仪表盘样式总结(gauge)
- Spring Boot 微服务集群日志等
- PL/SQL子程序存储过程IN,OUT,IN OUT参数模式详解
- js模板引擎-art-template常用总结
- 设计模式-概述;面向对象基本原则
- python中关于round函数的小坑
- websocket
- 个人主页登陆界面
- Js学习之路四 --- 提取事件、匿名函数、数组
- linux 环境变量设置
- Java学习第二天