当前位置: 代码迷 >> PB >> PB中建立临时表并在调用的存储过程中二次调用的疑点
  详细解决方案

PB中建立临时表并在调用的存储过程中二次调用的疑点

热度:65   发布时间:2016-04-29 05:54:20.0
PB中建立临时表并在调用的存储过程中二次调用的疑问
主要代码如下:
————————
///生成临时表
ls_sql = "create table #temp_rcvord ("     + &
         "rcv    char(40)    not null,"  + &
         "ord    char(40)    not null,"  + &
         "item   int         not null,"  + & 
"dat    datetime    not null,"  + &  
         "priceterm  char(10)    null)" 
EXECUTE IMMEDIATE :ls_sql USING SQLCA;
sqlca.of_commit()
lb_temp =   true

 //
FOR  k = 1  to  upperbound(ll_rowcount)   
   li_itemid    = dw_form.getitemNumber(ll_rowcount[k],"pchs_ordit_id")
   sqlca.autocommit = true
 DECLARE up_temp PROCEDURE FOR up_pchsord_genrcv //使用到临时表#temp_rcvord 
         @arg_ordid = :ls_ordid,   
         @arg_item  = :li_itemid
Using sqlca;
  Execute  up_temp;
  

  If SQLCA.sqlcode < 0  then
      messagebox("提醒","!")
  lb_temp =   false
     end if 
  sqlca.autocommit = false   
  CLOSE   up_temp ;
  sqlca.of_commit()    
next

IF  lb_temp   then
DECLARE up_temp1 PROCEDURE FOR up_pchsord_rcvafter //使用到临时表#temp_rcvord 
  using sqlca;
  Execute  up_temp1 ;
  CLOSE    up_temp1 ;
  sqlca.of_commit() 
End if


IF lb_temp   then
messagebox("成功","!")
End if

//删除临时表
ls_sqldrop  = "drop table  #temp_rcvord"
EXECUTE IMMEDIATE :ls_sqldrop  USING  SQLCA;
sqlca.of_commit()


以上是主要代码,使用环境:PB9及ASE12.5 10430目前的困惑:
1、以上代码, 在上面的环境中有时候不正常,当然平时都正常;
2、如果升级ASE到11449EBF,肯定不正常。
请教这一般是什么问题?
------解决方案--------------------
呵呵,老大都没能搞定??

有没有试过跟踪一下错误信息?
------解决方案--------------------
会不会和你自定义的SQLCA有关系
------解决方案--------------------
需要判断一下sql的返回值,如果出错,不要再继续执行

建议把创建临时表和使用临时表的代码全放在存储过程中执行,执行完删除

或者不要用临时表,用一个表达代替,增加一个操作员字段,每次操作时,先删除原来的数据(当前操作员的),然后再处理
------解决方案--------------------

------解决方案--------------------
那应该是存储过程执行异常了,结果未执行到0031那个地方
------解决方案--------------------
还是把临时表和使用临时表放到一个事务中吧
A事务创建的临时表,B事务不一定认吧
  相关解决方案