Declare my_proce Procedure For p_get_name;
// 定义过程调用
Execute my_proce ;
// 执行过程,这里是不需要其他参数的
If SQLCA.SQLCode <> 0 Then // 调用过程出现错误处理
End If
Fetch my_proce Into :ls_ReturnName;
// 获取出参值,也就是OUT的变量,如果没有out类型的变量,这句也就不需要了
If SQLCA.SQLCode <> 0 Then // 获取数据出现错误处理
End If
Close my_proce ;
// 关闭调用
二、下面主要表述不同的存储过程对应的定义方式
一、 无入参存储过程调用
Create Or Replace Procedure p_get_name(v_name Out Varchar2) As
//存储过程,有一个out类型参数,无入参
Begin
v_name := 'Jone';
End;
//在PB中这样定义
Declare my_proce Procedure For p_get_name; // 正确
Declare my_proce Procedure For p_get_name(); // 这个也正确
//如果你试图传一个参数
Declare my_proce Procedure For p_get_name(:ls_Name); 这个就会在执行的时候报错了
二、 有入参存储过程调用
Create Or Replace Procedure p_get_name(v_First in Varchar2,
v_Last in varchar2,
v_name Out Varchar2) As
Begin
v_name := v_First||v_Last;
End;
//在PB中这样定义 ,这里起名A ,B ,主要是为了不以字面意义影响了思路
Declare my_proce Procedure For p_get_name(:ls_A ,:ls_B)
//正确,这里的变量会和过程变量循序的对应 ,也就是ls_A对应v_first ,ls_B 对应 v_Last
Declare my_proce Procedure For p_get_name(:ls_B ,:ls_A)
//正确,这里的变量会和过程变量循序的对应 ,也就是ls_B对应v_first ,ls_A 对应 v_Last
Declare my_proce Procedure For p_get_name("Michael ","Jordan")
//错误,直接使用值是不行的,必须使用变量
//我们来指定对应关系,这样就不依赖你输入的顺序了
Declare my_proce Procedure For p_get_name(v_last=>:ls_A,v_first=>:ls_B)
Declare my_proce Procedure For p_get_name(v_first=>:ls_B,v_last=>:ls_A)
//上面这2个定义是完全一样的
Declare my_proce Procedure For p_get_name(v_first1=>:ls_First,v_last=>:ls_Last)
//这个定义是错误的 ,因为过程中根本就没有叫v_first1的参数
Declare my_proce Procedure For p_get_name(:ls_A ,:ls_B,:ls_C)
//错误,你试图给给OUT类型的参数也传一个进去就错误了
/*注意: 如果存储过程定义的OUT类型的参数不在最后,而是位于入参的中间或者前面的话,那么在PB中定义的话就必须指定对应,否则会报错的,比如:*/
Create Or Replace Procedure p_get_name(v_name Out Varchar2,
v_First in Varchar2,
v_Last in varchar2
) As
Begin
v_name := v_First||v_Last;
End;
//这是就必须使用 v_First=> ,v_Last=>这样的定义 ,否则就是错误的