oracle 参数类型 存储过程 获取_oracle存储过程--参数类型研究(in,out,in out)

###########################in############################

create or replace procedure pro_eight(p_one in varchar2,

p_two out varchar2,

p_three in out varchar2) is

v_str1 varchar2(32) := '';

v_str2 varchar2(32) default '';

v_str3 varchar2(32);

begin

dbms_output.put_line('传参:' || 'p_one:' || p_one|| ',p_two:' || p_two|| ',p_three:' || p_three);

-- in类型变量不能接收赋值

p_one:='one changed';

--打印变量

dbms_output.put_line('变量:' || 'v_str1:' || v_str1|| ',v_str2:' || v_str2|| ',v_str3:' || v_str3);

exception

when others then dbms_output.put_line('exception!');

end pro_eight;

0818b9ca8b590ca3270a3433284dd417.png

###########################out############################

create or replace procedure pro_eight(p_one in varchar2,

p_two out varchar2,

p_three in out varchar2) is

v_str1 varchar2(32) := '';

v_str2 varchar2(32) default '';

v_str3 varchar2(32);

begin

dbms_output.put_line('传参:' || 'p_one:' || p_one|| ',p_two:' || p_two|| ',p_three:' || p_three);

-- in类型变量不能接收赋值

--p_one:='one changed';

-- out类型只能接收赋值,不能给其他变量赋值。

-- 这样赋值的语句虽然编译和执行都不报错,但是被赋值的变量就是为空,根本没接收到值。

v_str2 :=p_two;

dbms_output.put_line('变量:' || ',v_str2:' || v_str2);

--打印变量

dbms_output.put_line('变量:' || 'v_str1:' || v_str1|| ',v_str2:' || v_str2|| ',v_str3:' || v_str3);

exception

when others then dbms_output.put_line('exception!');

end pro_eight;

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

###########################in out############################

create or replace procedure pro_eight(p_one in varchar2,

p_two out varchar2,

p_three in out varchar2) is

v_str1 varchar2(32) := '';

v_str2 varchar2(32) default '';

v_str3 varchar2(32);

begin

dbms_output.put_line('传参:' || 'p_one:' || p_one|| ',p_two:' || p_two|| ',p_three:' || p_three);

-- in类型变量不能接收赋值

--p_one:='one changed';

-- out类型只能接收赋值,不能给其他变量赋值。

-- 这样赋值的语句虽然编译和执行都不报错,但是被赋值的变量就是为空,根本没接收到值。

--v_str2 :=p_two;

--dbms_output.put_line('变量:' || ',v_str2:' || v_str2);

-- in out 类型可以接收赋值,也可以给其他变量赋值

v_str3:=p_three;

v_str3:=v_str3||' changed';

dbms_output.put_line('变量:' || 'v_str3:' || v_str3);

p_three:=v_str3||' again.';

dbms_output.put_line('参数:' || 'p_three:' || p_three);

--打印变量

dbms_output.put_line('变量:' || 'v_str1:' || v_str1|| ',v_str2:' || v_str2|| ',v_str3:' || v_str3);

exception

when others then dbms_output.put_line('exception!');

end pro_eight;

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

@@@@@@@@@@@@@@@@分割@@@@@@@@@@@@@@@@@@@

测试时in out传参的区别

create or replace procedure pro_nine(p_one in varchar2) is

v_str1 varchar2(32) := '';

begin

dbms_output.put_line('传参:' || 'p_one:' || p_one);

v_str1:=p_one;--变量的赋值

-- v_str2=>p_one;--报错,=>只用于在调用时往参数列表传参。

dbms_output.put_line('变量:' || 'v_str1:' || v_str1);

exception

when others then dbms_output.put_line('exception!');

end pro_nine;

Sql windows 调用

call pro_nine('11');

-- exec pro_nine('11');--报错,这不是sql,是命令,应该在命令窗口执行

Command window 调用

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0

Connected as uddrb@MYORCL

SQL> exec pro_nine('11');

PL/SQL procedure successfully completed

SQL>

如果参数中有out和in out类型参数,就不能直接传参,必须传入变量。

create or replace procedure pro_nine(p_one in varchar2,p_two out varchar2) is

begin

dbms_output.put_line('传参:' || 'p_one:' || p_one);

p_two:=p_one||' plus one.';

dbms_output.put_line('传参:' || 'p_two:' || p_two);

exception

when others then dbms_output.put_line('exception!');

end pro_nine;

0818b9ca8b590ca3270a3433284dd417.png

Sql windows 调用

-- out参数必须绑定变量

declare

v_res varchar2(32);

begin

pro_nine('11',v_res);

dbms_output.put_line('结果:' || 'v_res:' || v_res);

end;

这里正确执行了,但是想要看到打印语句需要把这些代码放到test winddow执行。

Command window 调用

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0

Connected as uddrb@MYORCL

SQL> var v_str varchar2(32);

SQL> exec :v_str :='222';

PL/SQL procedure successfully completed

v_str

---------

222

SQL> exec pro_nine('111',p_two => :v_str);

PL/SQL procedure successfully completed

v_str

---------

111 plus one.

SQL>

注意变量的声明和赋值方式,以及传参方式。

在command命令窗口模式下,变量的声明var v_str varchar2(32);

执行存储过程语句需要使用命令exec。

使用变量时前面需要加一个冒号:v_str。

例如:

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0

Connected as uddrb@MYORCL

SQL> var v_str varchar2(32):='222';

SQL> exec dbms_output.put_line('v_str:'||:v_str);

PL/SQL procedure successfully completed

v_str

---------

SQL>

上面的值没打印出来,说明这样赋值是不对的。应该用

exec :v_str :='222';

参数列表参数指定使用=>指定变量。

exec pro_nine('111',p_two => :v_str);

----------------------------------------

总结就不写了,有些东西自己做一下实验比看十本书都强。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值