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
- create or replace procedure pro_demo_param(
- p_one in varchar2,--可以传入参数
- p_two out varchar2,--可以返回值
- p_three in out varchar2--既可以传入参数,也可以返回值
- ) is
- begin
- dbms_output.put_line(‘参数:’ || ‘p_one:’ || p_one || ‘,p_two:’||p_two || ‘,p_three:’||p_three);
- end pro_demo_param;
就简单的将输入的参数输出
p_one,p_three是可以接受参数的,p_two只可以在过程里被赋值,然后将值返回
2. 对out参数赋值,并输出
[sql] view plain copy
- create or replace procedure pro_demo_param(
- p_one in varchar2,--可以传入参数
- p_two out varchar2,--可以返回值
- p_three in out varchar2--既可以传入参数,也可以返回值
- ) is
- v_str_two varchar2(20) := ‘路飞’; --声明并初始化一个变量
- begin
- dbms_output.put_line(‘参数:’ || ‘p_one:’ || p_one || ‘,p_two:’||p_two || ‘,p_three:’||p_three);
- p_two := v_str_two;--对out型参数进行赋值
- end pro_demo_param;
测试窗口:
执行一下:
成功返回了路飞。
3. 对in型变量赋值(错误)
上面,我们队out型参数进行了赋值,这是正确的做法,如果对in型变量进行赋值,会报错的
[sql] view plain copy
- create or replace procedure pro_demo_param(
- p_one in varchar2,--可以传入参数
- p_two out varchar2,--可以返回值
- p_three in out varchar2--既可以传入参数,也可以返回值
- ) is
- v_str_two varchar2(20) := ‘路飞’; --声明并初始化一个变量
- begin
- dbms_output.put_line(‘参数:’ || ‘p_one:’ || p_one || ‘,p_two:’||p_two || ‘,p_three:’||p_three);
- p_two := v_str_two;--对out型参数进行赋值
- p_one := v_str_two; --对in型变量赋值(错误)
- end pro_demo_param;
在编辑模式下查看,会有错误提示:
[sql] view plain copy
- PROCEDURE FOSS.PRO_DEMO_PARAM 编译错误
- 错误:PLS-00363: expression ‘P_ONE’ cannot be used as an assignment target
- 行:15
- 文本:p_one := v_str_two; --对in型变量赋值(错误)
- 错误:PL/SQL: Statement ignored
- 行:15
- 文本:p_one := v_str_two; --对in型变量赋值(错误)
注释掉这行,就可以了。
4. 用in型变量,给其他变量赋值
[sql] view plain copy
- create or replace procedure pro_demo_param(
- p_one in varchar2,--可以传入参数
- p_two out varchar2,--可以返回值
- p_three in out varchar2--既可以传入参数,也可以返回值
- ) is
- v_str_one varchar2(20) := ‘’;
- begin
- dbms_output.put_line(‘参数:’ || ‘p_one:’ || p_one || ‘,p_two:’||p_two || ‘,p_three:’||p_three);
- v_str_one := p_one; --用in型变量,给其他变量赋值
- dbms_output.put_line(‘变量:’ || v_str_one);
- end pro_demo_param;
测试窗口:
传入2个参数,运行一下
5. 用out型变量,给其他变量赋值(编译通过,但是无法成功)
[sql] view plain copy
- create or replace procedure pro_demo_param(
- p_one in varchar2,--可以传入参数
- p_two out varchar2,--可以返回值
- p_three in out varchar2--既可以传入参数,也可以返回值
- ) is
- v_str_one varchar2(20) := ‘’;
- begin
- dbms_output.put_line(‘参数:’ || ‘p_one:’ || p_one || ‘,p_two:’||p_two || ‘,p_three:’||p_three);
- v_str_one := p_two; --用out型变量,给其他变量赋值(错误)
- dbms_output.put_line(‘变量:’ || v_str_one);
- end pro_demo_param;
这样是可以编译通过的,但是测试时:
还没有评论,来说两句吧...