主要代码如下:
————————
///生成临时表
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事务不一定认吧