随笔 - 50  文章 - 0 评论 - 17 trackbacks - 0

PRO*C结果循环
如果不提交,服务完成不会自动提交,数据库再有stock行更新会陷入持续等待,只能杀掉AS才可以,无报错。
PRO*C 中间提交会报错的,
最后统一提交不会报错,即使中间有更新表的部分主键,或者是全部主键,包括查询结果集中使用的主键元素。


换做过程

PRO*的结果游标是先fetch到缓存的
  [PRO*C结果集语句][select exchange_type, branch_no, stock_account, stock_code from stock where stock_account = 'A001854006']                
  {                
    [PRO*C记录获取开始][@exchange_type, @branch_no, @stock_account, @stock_code]                
                
      [PRO*C语句][update stock set stock_account = '22222' where stock_account = @stock_account]                
      [PRO*C语句][insert into entrust(stock_account, stock_code) values(@stock_account, @stock_code)]                
    [PRO*C记录获取结束][@exchange_type, @branch_no, @stock_account, @stock_code]                
                
  }                
  else                
  {                
    @error_no = SQLCODE;  //20080722 shirui add                                                                                                                                                                                                                                                
    sprintf(@hint_info,"[%d]%.200s", @error_no, "select exchange_type, branch_no, stock_account, stock_code from stock where stock_holder = 'A1854004'");                
    [PRO*C结果集函数报错返回][329999][SQL语句执行错误][@hint_info]                                                                                                                                                                                                 
  }                
  [PRO*C事务提交]                

比如这种,先更新了,stock_accout,但是插入的 entrust表中的都是 A1854006,这样就会导致数据不一致了,所以才建议不要这样写吧。


posted on 2011-11-19 16:10  tigertall  阅读(329)  评论(0编辑  收藏