PB调用oracle存储过程

一、PB中调用过程的一般格式 

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=>这样的定义 ,否则就是错误的  

三、INOUT类型过程的调用 

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 这个是重点 ,代表这变量可以是outin 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调用存储过程的一个方法  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值