4.3.2 存储过程的参数模式
1、IN模式参数
输入类型参数,参数值由调用方传入,并且只能被存储过程读取。这也是最常用的、默认的参数模式。
使用方法 :定义的参数后面使用IN关键字,使用时直接引用参数名称即可。
参数定义:…… PRO_DETAIL(ATTR1 in number, ATTR2 in varchar2, ATTR3 in varchar2) is……
参数引用:INSERT INTO CJ_T_DETAIL VALUES(ATTR1, ATTR2, ATTR3);
调用存储过程时, 传递参数的方法有:指定名称传递,按位置传递,混合方式传递 (即前两种方式混合使用);
指定名称传递 :PRO_DETAIL(ATTR2=>这是参数测试, ATTR1=>2, ATTR3= >CJ);
按位置传递:PRO_DETAIL(ATTR1, ATTR2, ATTR3); 举例如下图:
混合传参 ,举例如下图:
- IN模式参数的默认值
ORACLE支持在声明IN参数时,给其初始化默认值。当调用存储过程时,如果没有传入该参数,则存储过程使用默认值操作。
使用方法:param1 in varchar2 default ‘默认值’, param2 ……
2、OUT模式参数
输出类型参数,表示已在存储过程中被赋值,并且这个参数值可以传递到当前存储过程以外的环境中。
使用方法 :定义的参数后面使用OUT关键字,使用时直接引用参数名称即可。
如PRO2,第二三个参数为OUT模式,调用该存储过程时,需要先声明两个变量来存放输出的参数值,举例如下图:
输出如下,第一行为存储过程内的输出,第二行为调用时获取到内容的输出:
-
如何在SQL *Plus环境执行OUT模式的存储过程?
需要声明全局变量存储OUT参数的返回值:
variable v_attr1 varchar2(20);
variable v_attr2 varchar2(20);
exec PRO_InsToDetail2(3, :v_attr1, :v_attr2);然后可以使用SELCT语句检索绑定的变量值:
SELECT :v_attr1, :v_attr2 FROM DUAL;也可以使用PRINT打印输出变量值:
print v_attr1 v_attr2;
3、IN OUT模式参数
在执行存储过程时,IN参数不能够被修改,只能根据被传入的指定值为存储过程提供数据;而OUT类型只能被等待赋值,不能像IN参数为存储过程本身提供数据。IN OUT参数可以兼顾另两种参数的特点:可以从外界传入值,执行完后,可以将参数的返回值传给外界。
练习需求:编写存储过程,传入参数num(IN OUT模式)和flag(IN模式),根据flag对num求平方或平方根?
可以看到,存储过程pro_square中,var_number传入参数值3,执行结束后传出值1.73。