Oracle基础知识(二十二) - 存储过程in out inout三种参数模式

参考博客:

http://blog.csdn.net/lushuaiyin/article/details/9289275

http://www.cnblogs.com/peach/archive/2009/06/10/1500242.html

写的很好,学习一下


0. 概要

Oracle中过程与函数都可以有参数,参数的类型可以指定为in、out、in out三种模式。

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

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

in out 表示高参数可以向该过程中传递值,也可以将某个值传出去


1. 声明三个参数,简单的输出

[sql]  view plain  copy
  1. create or replace procedure pro_demo_param(  
  2.        p_one in varchar2,--可以传入参数  
  3.        p_two out varchar2,--可以返回值  
  4.        p_three in out varchar2--既可以传入参数,也可以返回值  
  5. is  
  6.   
  7. begin  
  8.   
  9.   dbms_output.put_line('参数:' || 'p_one:' || p_one || ',p_two:'||p_two || ',p_three:'||p_three);  
  10.     
  11. end pro_demo_param;  

就简单的将输入的参数输出

p_one,p_three是可以接受参数的,p_two只可以在过程里被赋值,然后将值返回

2. 对out参数赋值,并输出

[sql]  view plain  copy
  1. create or replace procedure pro_demo_param(  
  2.        p_one in varchar2,--可以传入参数  
  3.        p_two out varchar2,--可以返回值  
  4.        p_three in out varchar2--既可以传入参数,也可以返回值  
  5. is  
  6.     
  7.   v_str_two varchar2(20) := '路飞'--声明并初始化一个变量  
  8.     
  9. begin  
  10.   
  11.   dbms_output.put_line('参数:' || 'p_one:' || p_one || ',p_two:'||p_two || ',p_three:'||p_three);  
  12.     
  13.   p_two := v_str_two;--对out型参数进行赋值  
  14.     
  15. end pro_demo_param;  
测试窗口:

执行一下:

成功返回了路飞。


3. 对in型变量赋值(错误)

上面,我们队out型参数进行了赋值,这是正确的做法,如果对in型变量进行赋值,会报错的

[sql]  view plain  copy
  1. create or replace procedure pro_demo_param(  
  2.        p_one in varchar2,--可以传入参数  
  3.        p_two out varchar2,--可以返回值  
  4.        p_three in out varchar2--既可以传入参数,也可以返回值  
  5. is  
  6.     
  7.   v_str_two varchar2(20) := '路飞'--声明并初始化一个变量  
  8.     
  9. begin  
  10.   
  11.   dbms_output.put_line('参数:' || 'p_one:' || p_one || ',p_two:'||p_two || ',p_three:'||p_three);  
  12.     
  13.   p_two := v_str_two;--对out型参数进行赋值  
  14.     
  15.   p_one := v_str_two; --对in型变量赋值(错误)  
  16.     
  17. end pro_demo_param;  

在编辑模式下查看,会有错误提示:

[sql]  view plain  copy
  1. PROCEDURE FOSS.PRO_DEMO_PARAM 编译错误  
  2.   
  3. 错误:PLS-00363: expression 'P_ONE' cannot be used as an assignment target  
  4. 行:15  
  5. 文本:p_one := v_str_two; --对in型变量赋值(错误)  
  6.   
  7. 错误:PL/SQL: Statement ignored  
  8. 行:15  
  9. 文本:p_one := v_str_two; --对in型变量赋值(错误)  

注释掉这行,就可以了。


4. 用in型变量,给其他变量赋值

[sql]  view plain  copy
  1. create or replace procedure pro_demo_param(  
  2.        p_one in varchar2,--可以传入参数  
  3.        p_two out varchar2,--可以返回值  
  4.        p_three in out varchar2--既可以传入参数,也可以返回值  
  5. is  
  6.     
  7.   v_str_one varchar2(20) := '';  
  8.     
  9. begin  
  10.   
  11.   dbms_output.put_line('参数:' || 'p_one:' || p_one || ',p_two:'||p_two || ',p_three:'||p_three);  
  12.     
  13.   v_str_one := p_one; --用in型变量,给其他变量赋值  
  14.     
  15.   dbms_output.put_line('变量:' || v_str_one);  
  16.     
  17. end pro_demo_param;  

测试窗口:

传入2个参数,运行一下


5. 用out型变量,给其他变量赋值(编译通过,但是无法成功)

[sql]  view plain  copy
  1. create or replace procedure pro_demo_param(  
  2.        p_one in varchar2,--可以传入参数  
  3.        p_two out varchar2,--可以返回值  
  4.        p_three in out varchar2--既可以传入参数,也可以返回值  
  5. is  
  6.     
  7.   v_str_one varchar2(20) := '';  
  8.     
  9. begin  
  10.   
  11.   dbms_output.put_line('参数:' || 'p_one:' || p_one || ',p_two:'||p_two || ',p_three:'||p_three);  
  12.     
  13.   v_str_one := p_two; --用out型变量,给其他变量赋值(错误)  
  14.     
  15.   dbms_output.put_line('变量:' || v_str_one);  
  16.     
  17. end pro_demo_param;  

这样是可以编译通过的,但是测试时:


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值