oracle存储过程--参数类型研究(in,out,in out)
2013-07-10 11:46
288 查看
###########################in############################
###########################out############################
###########################in out############################
@@@@@@@@@@@@@@@@分割@@@@@@@@@@@@@@@@@@@
测试时in out传参的区别
Sql windows 调用
Command window 调用
如果参数中有out和in out类型参数,就不能直接传参,必须传入变量。
Sql windows 调用
这里正确执行了,但是想要看到打印语句需要把这些代码放到test winddow执行。
Command window 调用
注意变量的声明和赋值方式,以及传参方式。
在command命令窗口模式下,变量的声明var v_str varchar2(32);
执行存储过程语句需要使用命令exec。
使用变量时前面需要加一个冒号:v_str。
例如:
上面的值没打印出来,说明这样赋值是不对的。应该用
exec :v_str :='222';
参数列表参数指定使用=>指定变量。
exec pro_nine('111',p_two => :v_str);
----------------------------------------
总结就不写了,有些东西自己做一下实验比看十本书都强。
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;
###########################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;
###########################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;
@@@@@@@@@@@@@@@@分割@@@@@@@@@@@@@@@@@@@
测试时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;
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);
----------------------------------------
总结就不写了,有些东西自己做一下实验比看十本书都强。
相关文章推荐
- oracle存储过程,IN OUT 类型的参数
- MySQL 存储过程参数有三种类型:in、out、inout。它们各有什么作用和特点呢?
- Swift中In-Out类型的参数
- 详解MySQL存储过程参数有三种类型(in、out、inout)
- (转)MySQL 存储过程参数有三种类型:in、out、inout。它们各有什么作用和特点呢?
- 参数类型ref、in与out的区别
- 详解MySQL存储过程参数有三种类型(in、out、inout)
- 固本培元之三:Convert、运算符、流程控制语句、ref/out/in三种参数类型
- MySQL存储过程和自定义函数、Navicat、创建存储过程和函数、调用存储过程和函数、三种方式、In和Out类型参数、
- MySQL存储过程和自定义函数、Navicat、创建存储过程和函数、调用存储过程和函数、三种方式、In和Out类型参数、
- 解决反射时因参数类型(out参数)不正确而导致的异常
- Oracle 子程序参数模式,IN,OUT,IN OUT
- 返回多个不同类型参数的值(out)可变参数一维数组( params )把值从方法中带出(ref) 方法递归(方法自己调用自己与循坏类似注意return每次只能跳出一个方法))
- 关于aidl参数方向in,out,inout网上的解释
- in out in/out 三种参数的区别
- Oracle存储过程in、out、in out 模式参数
- Eclipse中使用printf报错 提示参数类型不对 已解决The method printf(String, Object[]) in the type PrintStream is not ap
- 润乾报表报出“索引中丢失 IN 或 OUT 参数”问题解决办法
- ref or out 修饰方法的参数,调用的时候参数类型必须严格匹配。
- Oracle 子程序参数模式,IN,OUT,NOCOPY