【问题标题】:When using OCCI deleting runs forever使用 OCCI 删除时永远运行
【发布时间】:2017-09-13 14:01:17
【问题描述】:

同一行:

DELETE(SELECT * FROM tablename WHERE id=12)

在 SQL Developer 上运行正常,而在使用 occi API 时需要永远。

我已检查查询“SELECT * FROM tablename WHERE id=12”是否匹配非空行集。

更具体地说,我使用以下语法:

oracle::occi::Statement *deleteStm = con->createStatement("DELETE(SELECT * FROM tablename WHERE id=12)");
oracle::occi::ResultSet *rs = deleteStm->executeQuery();

【问题讨论】:

  • 你提交了你的交易吗?
  • 不,我没有。但我看不出这有什么帮助:使用调试器运行时,我永远不会离开 executeQuery() 行。我应该在哪里提交交易?
  • @lad2025 坦克!
  • @lad2025 我在删除之前提交了它,它起作用了。您能解释一下为什么即使查询“SELECT * FROM tablename WHERE id=12”返回匹配项,我也无法删除新插入(未提交)的行?

标签: sql oracle occi


【解决方案1】:

我怀疑在你的情况下你只是有未提交的交易。是这样的:

session1                   session2
DELETE ...                                        table/rows is locked

                           SELECT * FROM ...      you will see all data

                           DELETE ...             and now you will wait and wait
                                                  until lock is released

COMMIT;
                           SELECT * FROM ...      now resultset is empty

我强烈建议阅读Data Concurrency and Consistency

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    • 2022-10-06
    • 2018-09-30
    • 1970-01-01
    • 2019-08-20
    • 1970-01-01
    相关资源
    最近更新 更多