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,这样就会导致数据不一致了,所以才建议不要这样写吧。