问: PB中的SQLCA 事务与数据库中存储过程的事务关系.
PB9 + SQL Server 2000
我在DW 中设置 stored procedure update ... , 并选取好update , insert , delete 的相应存储过程以及参数;
问题:
1, 在dw.update() 前, 应该设置sqlca.autocommit 为true 还是 false ?
2, DW.update() 时,若是每行数据都要执行一次存储过程, 那么,当DW中如果有引起update() 失败的行时, 之前已经执行了存储过程的行的数据是不是已经写入了数据库, 这时,即便是在PB 中 rollback using sqlca; 是不是也会造成数据的不一至?
[解决办法]
1, 在dw.update() 前, 应该设置sqlca.autocommit 为true 还是 false ?
一般设置为 false 设置一次后以后一直有效 不需要把把设置
如果设置为true就自动保存了,不需要commit 当然也不能rollback了
2, DW.update() 时,若是每行数据都要执行一次存储过程, 那么,当DW中如果有引起update() 失败的行时, 之前已经执行了存储过程的行的数据是不是已经写入了数据库, 这时,即便是在PB 中 rollback using sqlca; 是不是也会造成数据的不一至?
看你是否是 sqlca.autocommit
true 就保存了
false就可以rollback
[解决办法]
基本就是楼上所说的了。
一般程序里不设autocommit为ture的。
设成false,然后由程序根据update操作的结果,来确定执行commit还是rollback。
让系统自动提交的话,有些情况程序运行结果会出现不可控。
[解决办法]
重要的是,sql中的存储过程再调用其他存储过程时,我们也需要判断其他存储过程的返回值,否则的话这种嵌套式的调用貌似回滚不了~~
呵呵,所以最好把存储过程中的代码也写严谨一点~~
[解决办法]
我们测试过,不过是在sql server的查询分析器上直接做的,
创建两个事务并嵌套,其中内部事务执行commit而外部事务 rollback
最终结果将是rollback.
[解决办法]
数据窗口的这个功能 知道 ,一直没用过
变通方法不用这玩意,省得费劲
[解决办法]
嵌套的存储过程 里面的commit最终还是受最外曾的 commit 或 rollback 控制的 ,记住一原则 事务是原子性的 没分割 有分割的说明数据库厂家搞错了