原文链接:https://www.cnblogs.com/zbj815/p/6854108.html

1、IN模式

IN模式是参数的默认模式,这种模式就是在程序运行的时候已经具有值,在程序体中值不会改变。

错误例子:

 1  create or replace procedure in_proc (
2 p_a in number , -- 形参, 这里的值是调用处传递的实参
3 p_b in number
4 )as
5 begin
6 p_a := 10 ; --实参被传递进来以后,在这个程序体中值就不可能被改变了
7 p_b := 20 ;
8 DBMS_OUTPUT.PUT_LINE(p_a) ;
9 DBMS_OUTPUT.PUT_LINE(p_b) ;
10 end ;

错误日志:

1 LINE/COL ERROR
2 -------- -------------------------------------------
3 6/5 PL/SQL: Statement ignored
4 6/5 PLS-00363: 表达式 'P_A' 不能用作赋值目标
5 7/5 PL/SQL: Statement ignored
6 7/5 PLS-00363: 表达式 'P_B' 不能用作赋值目标

注意:红色区域是错误的代码,值传递到程序体中值就不会改变了。

2、OUT模式

out模式定义的参数只能在过程体内部赋值,表示该参数可以将某个值传递到存储过程的调用处。

错误例子:

1 create or replace procedure out_proc (
2 p_a out number , --使用OUT模式
3 p_b out number
4 ) as
5 begin
6 DBMS_OUTPUT.PUT_LINE('p_a : ' || p_a) ; --输出参数值
7 DBMS_OUTPUT.PUT_LINE('p_b : ' || p_b) ;
8 end ;

目前out_proc过程体内并没有对参数进行赋值,编写一个PLSQL块,进行验证该过程。

1 declare
2 v_a number ; --定义变量
3 v_b number ;
4 begin
5 v_a := 10 ; --为变量赋值
6 v_b := 20 ;
7 out_proc(v_a , v_b) ; --调用out_proc过程
8 end ;

可以发现此时根本没有把参数传递的值打印出来,这样就可以验证使用OUT模式不可以传值的问题。

程序修改:

 1 create or replace procedure out_proc (
2 p_a out number , --使用OUT模式
3 p_b out number
4 ) as
5 begin
6 DBMS_OUTPUT.PUT_LINE('p_a : ' || p_a) ; -- OUT模式修饰的参数是不会接收从外部过程调用处传递进来的值
7 DBMS_OUTPUT.PUT_LINE('p_b : ' || p_b) ;
8 p_a := 100 ; -- 在过程体内为参数赋值
9 p_b := 200 ;
10 end ;

编写PLSQL块验证:

 1 declare
2 v_a number ; --定义变量
3 v_b number ;
4 begin
5 v_a := 10 ;
6 v_b := 20 ;
7 out_proc(v_a , v_b) ; --调用out_proc过程
8 DBMS_OUTPUT.PUT_LINE(v_a) ;
9 DBMS_OUTPUT.PUT_LINE(v_b) ;
10 end ;

这次值被成功输出了。这就验证了前面提出的问题(out模式定义的参数只能在过程体内部赋值,表示该参数可以将某个值传递到存储过程的调用处)。

简单来说就是OUT不可以接收从该过程的调用处传递进来的值,只能在过程体内部对参数进行赋值,而后才能把过程体内部的值传递到该过程的被调用处。

3、IN OUT模式

IN OUT 通俗来说就表示既可以向过程体外传递参数也可以从过程体内传出数值  。

例子:

 1 create or replace procedure inout_proc (
2 p_a in out number , -- 定义形参
3 p_b in out number
4 )as
5 begin
6 DBMS_OUTPUT.PUT_LINE('传递到过程体内的 p_a : ' || p_a ) ; --打印输出过程调用出传递进来的实参
7 DBMS_OUTPUT.PUT_LINE('传递到过程体内的 p_b : ' || p_b ) ;
8 p_a := 100 ; -- 在过程体内为参数赋值
9 p_b := 200 ;
10 end ;

编写PLSQL块验该过程

 1 declare
2 v_a number ; -- 定义变量
3 v_b number ;
4 begin
5 v_a := 10 ; --为变量赋值
6 v_b := 20 ;
7 inout_proc(v_a , v_b) ; --调用inout_proc 传递实参进去
8 DBMS_OUTPUT.PUT_LINE('传递到过程体内的 v_a : ' || v_a ) ; -- 输出在过程体内被修改的值
9 DBMS_OUTPUT.PUT_LINE('传递到过程体内的 v_b : ' || v_b ) ;
10 end ;

执行结果:

1 传递到过程体内的 v_a : 10
2 传递到过程体内的 v_b : 20
3 传递到过程体内的 v_a : 100
4 传递到过程体内的 v_b : 200

IN OUT简单来说就是过程调用处传递的实参,在过程体内会被接收到。并且在过程体内为形参赋的值也会被传递到过程调用处。

PLSQL中的三种参数模式IN、OUT、IN OUT的更多相关文章

  1. VMWare中的三种联网模式图解

    网络基础及局域网配置 1.简单的局域网结构 2.VMWare中的三种联网模式 NAT模式 桥接模式 VMnet1

  2. [Swift实际操作]八、实用进阶-(2)Swift语言中的三种消息传递模式

    本文将通过响应按钮的点击事件,来演示Target-Action消息传递机制,该机制主要用于响应用户的界面操作.打开创建的空白项目.然后在左侧的项目导航区,打开视图控制器的代码文件:ViewContro ...

  3. Http中的三种请求处理模式(MPM)的区别

    MPM---包括基于事件/异步,线程化和预分叉 MPM(multi-processing module)多种请求处理模式,分为三种工作模式: prefork worker event prefork- ...

  4. 详解 Java 中的三种代理模式

    代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能. 这里使用 ...

  5. http请求中的三种参数类型

    1.URL参数:实际就是querry string的方式,参数拼接在url之后以?隔开,参数之间以&连接. 优点:简单,页面跳转比较快. 缺点:1.基于浏览器对urk长度有限制,不能超过204 ...

  6. IOS开发之自定义Button(集成三种回调模式)

    前面在做东西的时候都用到了storyboard,在今天的代码中就纯手写代码自己用封装个Button.这个Button继承于UIView类,在封装的时候用上啦OC中的三种回调模式:目标动作回调,委托回调 ...

  7. 初识云计算的三种服务模式 (IaaS SaaS PaaS)

    近期公司在使用其它云服务的同一时候.要封装自己的云服务,以下作为开发产品前的热身.来了解云计算中的三种服务模式,笔者也是从网络上查找,进行综合总结.请拍.. 三种服务模式 依据如今最经常使用.也就是比 ...

  8. 三种Model模式

    目前项目中可能出现的三种Model模式,对于我们现在开发的一个项目,我觉得使用DDD的思想来设计模型比较清晰,使用DDD的思想把模型model分成了如下三种:ViewModel,它与页面相关,Doma ...

  9. .net core 注入中的三种模式:Singleton、Scoped 和 Transient

    从上篇内容不如题的文章<.net core 并发下的线程安全问题>扩展认识.net core注入中的三种模式:Singleton.Scoped 和 Transient 我们都知道在 Sta ...

随机推荐

  1. Excel柱状图折线图组合怎么做 Excel百分比趋势图制作教程

    Excel柱状图折线图组合怎么做 Excel百分比趋势图制作教程 用excel作图时候经常会碰到做柱状图和折线图组合,这样的图一般难在折线图的数据很小,是百分比趋势图,所以经常相对前面主数据太小了,在 ...

  2. arcgis 点线面操作

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  3. 继续对dubbo源代码进行maven builder

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/enson16855/article/details/32073981 原文地址:http://dtb ...

  4. linux守护进程配置文件

    守护进程是一种运行在非交互模式下的程序.一般来说,守护进程任务是和联网区域有关的:它们等待连接,以便通过连接提供服务.Linux 可以使用从 Web 服务器到 ftp 服务器的很多守护进程. /etc ...

  5. JSP Web第八章整理复习 过滤器

    P269  Filter过滤器的基本原理 P269  Filter过滤器体系结构 原理和体系结构看懂了就行 P270 例8-1过滤器代码与配置文件 略

  6. 【风马一族_php】

    原文来自:http://www.cnblogs.com/sows/p/6054383.html  (博客园的)风马一族 侵犯版本,后果自负 2016-11-11   15:13:51 回顾 数组:分配 ...

  7. 微服务开源生态报告 No.6

    「微服务开源生态报告」,汇集各个开源项目近期的社区动态,帮助开发者们更高效的了解到各开源项目的最新进展. 社区动态包括,但不限于:版本发布.人员动态.项目动态和规划.培训和活动. 非常欢迎国内其他微服 ...

  8. Linux的登录和退出

    Linux是一个多用户的操作系统,用户要使用该系统,首先必须登录系统,使用完系统后,必须退出系统. 本章主要讨论登录和退出系统的方法: 用户登录系统时,为了使系统能够识别自己,必须输入用户名和密码,经 ...

  9. hdu5441 并查集 长春网赛

    对于每次询问的大的值,都是从小的值开始的,那就从小到大处理,省去很多时间,并且秩序遍历一遍m; 这题cin容易超时,scanf明显快很多很多.G++又比C++快; //这代码scanf400+,cin ...

  10. 2019-9-23-dotnet-判断特定进程存在方法

    title author date CreateTime categories dotnet 判断特定进程存在方法 lindexi 2019-09-23 16:20:42 +0800 2019-09- ...