参考博客:
http://blog.****.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. 声明三个参数,简单的输出
-
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参数赋值,并输出
-
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型变量进行赋值,会报错的
-
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;
在编辑模式下查看,会有错误提示:
-
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型变量,给其他变量赋值
-
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型变量,给其他变量赋值(编译通过,但是无法成功)
-
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;
这样是可以编译通过的,但是测试时: