首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > PB >

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

2013-07-01 
PB中建立临时表并在调用的存储过程中二次调用的疑问主要代码如下:————————///生成临时表ls_sql create

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的返回值,如果出错,不要再继续执行

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

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


PB中建立临时表并在调用的存储过程中二次调用的疑义
[解决办法]
那应该是存储过程执行异常了,结果未执行到0031那个地方
[解决办法]
还是把临时表和使用临时表放到一个事务中吧
A事务创建的临时表,B事务不一定认吧

热点排行