PB 调用存储过程[Oracle]
发布时间:2020-12-12 14:50:16 所属栏目:百科 来源:网络整理
导读:话不多说,直接正题。偏重Declare方式 一、PB中调用过程的一般格式 Declare my_proce Procedure For p_get_name;// 定义过程调用Execute my_proce ;// 执行过程,这里是不需要其他参数的If SQLCA.SQLCode 0 Then // 调用过程出现错误处理End IfFetch my_proc
话不多说,直接正题。偏重Declare方式 一、PB中调用过程的一般格式 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=>这样的定义 ,否则就是错误的 三、INOUT类型过程的调用 //PB中使用Declare方式不能调用具有in out类型参数的存储过程的,故采用外部接口的方式 //直接上步骤 1. 创建一个事务对象 uo_transcation,new->pb object->standart class->transcation,命名为uo_transcation 2. 在uo_transcation 的Local External Functions 中定义存储过程,形如: subroutine p_get_name(string v_First,string v_Last,ref string v_name) rpcfunc 1. subroutine 过程无返回值 2. rpcfunc 不明白,照写吧 ,呵呵 3. ref 这个是重点 ,代表这变量可以是out,in out 类型 3. 把uo_transcation 当作默认事务对象 1. 找到application,也就是你程序写第一open的那个地方 2. 点击菜单 view -> propreties 就打开application的属性了 3. 点击 additional Properties -> variable Types ->sqlca 下面框修改成uo_transcation 4. OK 4. 在程序中直接使用 sqlca.p_get_name(a,b,c)这样的就可以 ,和普通函数一样 注意: 其实这也是PB调用存储过程的一个方法 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 缓存依赖、数据库缓存依赖学习以及在LinQ当中使用缓存依赖
- sklearn 中的 Pipeline 机制
- 大型Flash项目性能优化:关注0ms方法
- c# – 为什么在一行中声明一个变量,并在下一行中分配它?
- 正则表达式REGular Expression
- ruby-on-rails – 如何在Rails 4应用程序中禁用IP Spoofing
- c# – Bug或我做错了什么? Usercontrol绘画
- 求dojo/domReady不能在sync loader下使用的原因
- c – 如何在Qt无框窗口中实现QSizeGrip?
- React Native 简介:用 JavaScript 搭建 iOS 应用 (1)