1 Declare my_proce Procedure For p_get_name;
2 // 定义过程调用
4 Execute my_proce ;
5 // 执行过程,这里是不需要其他参数的
7 If SQLCA.SQLCode <> 0 Then // 调用过程出现错误处理
8 End If
9
10 Fetch my_proce Into :ls_ReturnName;
11 // 获取出参值,也就是OUT的变量,如果没有out类型的变量,这句也就不需要了
12
13 If SQLCA.SQLCode<> 0 Then // 获取数据出现错误处理
14 End If
15
16 Close my_proce ;
17 // 关闭调用
18
[sql]view plaincopy
19 Create Or Replace Procedure p_get_name(v_name Out Varchar2) As
20 //存储过程,有一个out类型参数,无入参
21 Begin
22 v_name := 'Jone';
23 End;
24
25 //在PB中这样定义
26 Declare my_proce Procedure For p_get_name; // 正确
27 Declare my_proce Procedure For p_get_name(); // 这个也正确
28 //如果你试图传一个参数
29 Declare my_proce Procedure For p_get_name(:ls_Name); 这个就会在执行的时候报错了
30 Create Or Replace Procedure p_get_name(v_First in Varchar2,
31 v_Last in varchar2,
32 v_name Out Varchar2) As
33 Begin
34 v_name := v_First||v_Last;
35 End;
36
37 //在PB中这样定义 ,这里起名A ,B ,主要是为了不以字面意义影响了思路
38
39 Declare my_proce Procedure For p_get_name(:ls_A,:ls_B)
40 //正确,这里的变量会和过程变量循序的对应 ,也就是ls_A对应v_first ,ls_B 对应 v_Last
41
42 Declare my_proce Procedure For p_get_name(:ls_B,:ls_A)
43 //正确,这里的变量会和过程变量循序的对应 ,也就是ls_B对应v_first ,ls_A 对应 v_Last
44
45 Declare my_proce Procedure For p_get_name("Michael ","Jordan")
46 //错误,直接使用值是不行的,必须使用变量
47
48 //我们来指定对应关系,这样就不依赖你输入的顺序了
49 Declare my_proce Procedure Forp_get_name(v_last=>:ls_A,v_first=>:ls_B)
50 Declare my_proce Procedure Forp_get_name(v_first=>:ls_B,v_last=>:ls_A)
51 //上面这2个定义是完全一样的
52
53 Declare my_proce Procedure Forp_get_name(v_first1=>:ls_First,v_last=>:ls_Last)
54 //这个定义是错误的 ,因为过程中根本就没有叫v_first1的参数
55
56 Declare my_proce Procedure For p_get_name(:ls_A,:ls_B,:ls_C)
57 //错误,你试图给给OUT类型的参数也传一个进去就错误了
58
59 /*注意: 如果存储过程定义的OUT类型的参数不在最后,而是位于入参的中间或者前面的话,那么在PB中定义的话就必须指定对应,否则会报错的,比如:*/
60 Create Or Replace Procedure p_get_name(v_name Out Varchar2,
61 v_First in Varchar2,
62 v_Last in varchar2
63 ) As
64 Begin
65 v_name := v_First||v_Last;
66 End;
67 //这是就必须使用 v_First=>,v_Last=>这样的定义 ,否则就是错误的
68 //PB中使用Declare方式不能调用具有in out类型参数的存储过程的,故采用外部接口的方式
69 //直接上步骤
71 1. 创建一个事务对象 uo_transcation ,new->pb object->standart class->transcation ,命名为uo_transcation
72 2. 在uo_transcation 的Local External Functions 中定义存储过程,形如:
73 subroutine p_get_name(string v_First, stringv_Last,ref string v_name) rpcfunc
74
75 1. subroutine 过程无返回值
76 2. rpcfunc 不明白,照写吧 ,呵呵
77 3. ref 这个是重点 ,代表这变量可以是out,in out 类型
78 3. 把uo_transcation 当作默认事务对象
79 1. 找到application ,也就是你程序写第一open的那个地方
80 2. 点击菜单 view -> propreties 就打开application的属性了
81 3. 点击 additional Properties -> variable Types->sqlca 下面框修改成uo_transcation
82 4. OK
83 4. 在程序中直接使用sqlca.p_get_name(a,b,c)这样的就可以 ,和普通函数一样
84
85 注意: 其实这也是PB调用存储过程的一个方法