程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了DB2 SQL脚本:如何启动事务并在发生错误时回滚大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决DB2 SQL脚本:如何启动事务并在发生错误时回滚?

开发过程中遇到DB2 SQL脚本:如何启动事务并在发生错误时回滚的问题如何解决?下面主要结合日常开发的经验,给出你关于DB2 SQL脚本:如何启动事务并在发生错误时回滚的解决方法建议,希望对你解决DB2 SQL脚本:如何启动事务并在发生错误时回滚有所启发或帮助;

从脚本中删除连接并提交,然后在外壳中执行此操作。然后使用+ c并测试退出状态(假设bash,应易于移植到其他sHell):

db2 connect to <db>

db2 +c -vstf migration.sql
if [ $? -ge 4 ]; then
    db2 rollBACk
else
    db2 commit
fi

db2返回:

* 8 on system error
* 4 db2 error (consTraint violation, object not found etC)
* 2 db2 warning 
* 1 no rows found

-s将停止退出代码> = 4的执行,测试将检查是否发生了这种情况并回滚事务。另外,您可能要添加一个日志文件:

db2 -l migration.log +c -vstf migration.sql
if [ $? -ge 4 ]; then
    db2 rollBACk
    tail -10 migration.log
else
    db2 commit
fi

如果发生错误,您可以拖尾日志文件以快速找出错误原因。如果使用日志文件,则可能要删除-v,因为它有点吵:

db2 -l migration.log +c -stf migration.sql
if [ $? -ge 4 ]; then
    db2 rollBACk
    tail -10 migration.log
else
    db2 commit
fi

解决方法

我正在为DB2数据库(V9.5)实现一个SQL脚本,以便添加列和重新组织数据。我想从linux命令行执行脚本:

$ db2 -vstf migration.sql

所有的语句@H_225_5@migration.sql都应该包含在事务中。如果一条语句失败,则必须回滚所有以前的更改。我怎样才能做到这一点?我尝试使用,START transaCTION但是在这种情况下DB2返回语法错误。

@H_75_2@migration.sql

    connect to ...

    -- not accepted by DB2
    START transaCTION;

    update ... set ... 
    alter table ...

    COMMIT;

    connect reset;
    terminate;

另外,我尝试按照此处所述关闭自动提交:

  • db2 +c -vstf migration.sql (在脚本中打开连接时不起作用)
  • 添加update command options using c off到migration.sql(错误时不回滚任何内容)

因此,是否有人有想法按预期使事务和回滚在db2命令行上工作?如果没有,它是否适用于Java / JDBC?

大佬总结

以上是大佬教程为你收集整理的DB2 SQL脚本:如何启动事务并在发生错误时回滚全部内容,希望文章能够帮你解决DB2 SQL脚本:如何启动事务并在发生错误时回滚所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。