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

川长思鸟来 2022-06-14 10:27 203阅读 0赞

参考博客:

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三种模式。

SouthEast

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. begin
  7. dbms_output.put_line(‘参数:’ || ‘p_one:’ || p_one || ‘,p_two:’||p_two || ‘,p_three:’||p_three);
  8. end pro_demo_param;

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

SouthEast 1

SouthEast 2

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. v_str_two varchar2(20) := ‘路飞’; --声明并初始化一个变量
  7. begin
  8. dbms_output.put_line(‘参数:’ || ‘p_one:’ || p_one || ‘,p_two:’||p_two || ‘,p_three:’||p_three);
  9. p_two := v_str_two;--对out型参数进行赋值
  10. end pro_demo_param;

测试窗口:

SouthEast 3

执行一下:

SouthEast 4

成功返回了路飞。

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. v_str_two varchar2(20) := ‘路飞’; --声明并初始化一个变量
  7. begin
  8. dbms_output.put_line(‘参数:’ || ‘p_one:’ || p_one || ‘,p_two:’||p_two || ‘,p_three:’||p_three);
  9. p_two := v_str_two;--对out型参数进行赋值
  10. p_one := v_str_two; --对in型变量赋值(错误)
  11. end pro_demo_param;

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

[sql] view plain copy

  1. PROCEDURE FOSS.PRO_DEMO_PARAM 编译错误
  2. 错误:PLS-00363: expression ‘P_ONE’ cannot be used as an assignment target
  3. 行:15
  4. 文本:p_one := v_str_two; --对in型变量赋值(错误)
  5. 错误:PL/SQL: Statement ignored
  6. 行:15
  7. 文本: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. v_str_one varchar2(20) := ‘’;
  7. begin
  8. dbms_output.put_line(‘参数:’ || ‘p_one:’ || p_one || ‘,p_two:’||p_two || ‘,p_three:’||p_three);
  9. v_str_one := p_one; --用in型变量,给其他变量赋值
  10. dbms_output.put_line(‘变量:’ || v_str_one);
  11. end pro_demo_param;

测试窗口:

SouthEast 5

传入2个参数,运行一下

SouthEast 6

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. v_str_one varchar2(20) := ‘’;
  7. begin
  8. dbms_output.put_line(‘参数:’ || ‘p_one:’ || p_one || ‘,p_two:’||p_two || ‘,p_three:’||p_three);
  9. v_str_one := p_two; --用out型变量,给其他变量赋值(错误)
  10. dbms_output.put_line(‘变量:’ || v_str_one);
  11. end pro_demo_param;

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

发表评论

表情:
评论列表 (有 0 条评论,203人围观)

还没有评论,来说两句吧...

相关阅读