CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  PowerBuilder >  数据库相关

如何调用数据库中带返回值的存储过程?

楼主the_rabbit(兔霸王)2002-10-08 17:57:39 在 PowerBuilder / 数据库相关 提问

需要为多条记录多次调用数据库中一存储过程nnn(输入参数arg1,2,3,4),  
  执行完成后需提取返回值  
  DECLARE   myproc   PROCEDURE   FOR    
        @ret_st   =   nnn  
        @xls   =   :arg1,  
        @hcbz   =   :arg2,  
        @hcfg   =   :arg3,  
        @hcnu   =   :arg4,  
        @ret_st   =   1   output,  
        @ret_text   =   ""   output;  
  若ret_st   =   0   COMMIT  
  否则ROLLBACK  
   
  但整个程序   SQLCA.AUTOCOMMIT   =   TRUE  
  同时定义myproc时,系统警告必须定义变量@ret_st  
   
  请问该如何在PB中使用该存储过程?同时如何解决COMMIT的问题 问题点数:50、回复次数:15Top

1 楼huangxinru(键盘手)回复于 2002-10-08 18:07:39 得分 5

EXECUTE   存储过程;  
  DO   WHILE   sqlca.sqlcode   =   0  
            FETCH   存储过程   INTO   :变量;  
  LOOP  
  Top

2 楼blueshu(学习Oracle9i)回复于 2002-10-08 18:11:43 得分 0

ret_st库里有没有定义啊Top

3 楼the_rabbit(兔霸王)回复于 2002-10-08 18:14:13 得分 0

ret_st是存储过程中的变量(是一个输出变量)  
  在PB中没有定义Top

4 楼flyerlxg(飞鸟)回复于 2002-10-08 18:29:39 得分 10

既然是SQLCA.AUTOCOMMIT   =   TRUE,那您又要来控制提交事物呢?大不了您是需要根据存储过程的执行情况来提交事物了,那最好把前面的那条属性设为false,然后在执行完存储过程后判断sqlca.sqlcode代码的情况,从而知道语句的执行情况,最后决定是提交还回滚。语句如   楼上的:  
   
  EXECUTE   存储过程;  
  DO   WHILE   sqlca.sqlcode   =   0  
            FETCH   存储过程   INTO   :变量;  
  LOOPTop

5 楼the_rabbit(兔霸王)回复于 2002-10-08 18:38:27 得分 0

这点我已经明白,但对于如何定义和使用该存储过程,不甚清楚  
  Top

6 楼the_rabbit(兔霸王)回复于 2002-10-08 21:07:33 得分 0

能详细说明一下吗??Top

7 楼xhwly(wly)回复于 2002-10-08 21:29:12 得分 0

DECLARE   myproc   PROCEDURE   FOR     nnn  
        @xls   =   :arg1,  
        @hcbz   =   :arg2,  
        @hcfg   =   :arg3,  
        @hcnu   =   :arg4,  
        @ret_st   =   :arg5   output,  
        @ret_text   =   :arg6   output;  
   
    execute   myproc   ;  
        if   sqlca.sqlcode   =   -1   then    
              messagebox("","error!")  
                return  
        end   if  
   
        fetch   myproc   into   :arg4,:arg5;  
          if   arg4   =   0   then    
                  commit;  
        else  
                  rallback;  
  end   if  
  Top

8 楼xhwly(wly)回复于 2002-10-08 21:30:54 得分 15

DECLARE   myproc   PROCEDURE   FOR     nnn  
        @xls   =   :arg1,  
        @hcbz   =   :arg2,  
        @hcfg   =   :arg3,  
        @hcnu   =   :arg4,  
        @ret_st   =   :arg5   output,  
        @ret_text   =   :arg6   output;  
   
    execute   myproc   ;  
        if   sqlca.sqlcode   =   -1   then    
              messagebox("","error!")  
                return  
        end   if  
   
        fetch   myproc   into   :arg5,:arg6;  
          if   arg5=   0   then    
                  commit;  
        else  
                  rallback;  
  end   if  
   
  Top

9 楼the_rabbit(兔霸王)回复于 2002-10-09 08:18:57 得分 0

不知道大家有没有注意到  
  @ret_st   =   nnn,对存储过程有没有什么影响?  
   
  同时按   xhwly(wly)的使用方法,系统仍然警告必须定义变量@ret_st  
   
  请问如何解决?Top

10 楼inalover(奇遇)回复于 2002-10-09 08:54:11 得分 5

这样试试  
  long   ll_ret  
  DECLARE   myproc   PROCEDURE   FOR     nnn  
        @xls   =   :arg1,  
        @hcbz   =   :arg2,  
        @hcfg   =   :arg3,  
        @hcnu   =   :arg4,  
        @ret_st   =   :arg5   output,  
        @ret_text   =   :arg6   output;  
   
    execute   ll_ret=myproc   ;  
        if   sqlca.sqlcode   =   -1   then    
              messagebox("","error!")  
                return  
        end   if  
   
        fetch   myproc   into   :arg5,:arg6;  
          if   arg5=   0   then    
                  commit;  
        else  
                  rallback;  
  end   if  
  Top

11 楼warchild(大成若缺)回复于 2002-10-09 08:58:46 得分 5

//emp_select   is   database   proc  
  //   The   syntax   of   emp_select   is:  
  //   "SELECT   emp_id    
  //   FROM   employee   WHERE   emp_state=@stateparm".  
   
  DECLARE   my_proc   DYNAMIC   PROCEDURE   FOR   SQLSA   ;  
  integer   Emp_id_var  
  string   Emp_state_var  
  PREPARE   SQLSA   FROM   "emp_select   @stateparm=?"   ;  
  Emp_state_var   =   "MA"  
  EXECUTE   DYNAMIC   my_proc   USING   :Emp_state_var   ;  
  FETCH   my_proc   INTO   :Emp_id_var   ;  
  CLOSE   my_proc   ;  
   
  也可用sqlda来做参数传递工作Top

12 楼gija(深蓝)回复于 2002-10-09 09:08:36 得分 0

从transcation继承一个对象,代替sqlca,在继承的对象里,local   external   functions定义存储过程,列入function   long   p_login(string   login_no,string   login_passwd,ref   string   user_name,ref   string   r)   RPCFUNC   ALIAS   FOR   "dbo.p_login"//用户登陆处理Top

13 楼my_yinger(竹林中)回复于 2002-10-09 09:32:26 得分 5

如何带参数执行SQL的系统存储过程?PB编程俱乐部   http://kjx.126.com  
   
  例:  
  -----------------------------------------------------------------  
  MS   SQL   Server存储过程   Sp_DropUser    
   
  CREATE   PROCEDURE   Sp_DropUser    
    (   @in_db   int,   @in_ou   int   OUTPUT   )  
  AS  
  .  
  .  
  .  
  -----------------------------------------------------------------  
  PB中执行  
   
  int   ls_name   //输入参数  
  int   ls_ou   //输出参数  
  DECLARE   dropUser_proc   PROCEDURE   FOR   Sp_DropUser    
          @in_db   =:ls_name   ,   @in_ou   =:ls_ou   OUTPUT;  
  SQLca.AutoCommit   =   TRUE  
  EXECUTE   dropUser_proc   ;  
  fetch   user_jj   into   :ls_ou;  
  SQLca.AutoCommit   =   false  
     
  Top

14 楼my_yinger(竹林中)回复于 2002-10-09 09:36:53 得分 0

上面是以前我根据   PB编程俱乐部   http://kjx.126.com   中介绍,  
  然后在实际工作中具体修改而成的,今天才发现http://kjx.126.com/已经上不去了Top

15 楼ylp163net(ylp)回复于 2002-10-09 13:24:15 得分 5

declare   pro_prjid     procedure   for     sp_hkproject_ret   @prjid   =:prjid   output;  
      execute   pro_prjid   ;  
      fetch       pro_prjid     into     :prjid   ;  
      close       pro_prjid   ;Top

相关问题

  • pb调用数据库存储过程
  • 通过ODBC连接sqlserver数据库调用存储过程并获得return或output的值(300分)
  • 怎样在数据库外部调用存储过程??!!
  • 关于vc调用数据库存储过程,特急!
  • 调用Anywhere数据库存储过程的错误
  • BCB怎么调用ms-sql数据库存储过程
  • 三层结构数据库中,怎样调用存储过程
  • 奇怪的跨数据库调用存储过程
  • sql2000数据库的存储过程如何调用oracle9i数据库中表?
  • 请问可不可以在存储过程中调用其他数据库中的存储过程??

关键词

  • 存储过程
  • 执行
  • prjid
  • myproc
  • sqlca
  • arg
  • hcnu
  • hcbz
  • hcfg
  • 变量

得分解答快速导航

  • 帖主:the_rabbit
  • huangxinru
  • flyerlxg
  • xhwly
  • inalover
  • warchild
  • my_yinger
  • ylp163net

相关链接

  • PowerBuilder类图书
  • PowerBuilder类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo