【发布时间】:2018-02-23 00:18:46
【问题描述】:
我想在 ORACLE 11g 版本中同时执行两个查询,并注意如果一个或两个查询失败,必须将两个表都返回到以前的状态。
在我的情况下,我需要进行更新并稍后插入另一个表,因此查询将大致如下:
$query="UPDATE table1 SET attr1 = ? WHERE whatever";
$stmt = $this->oracleDB->prepare($query);
$stmt->bindValue(1, $attr1, "string");
$stmt->execute();
$query="INSERT INTO table2 (attr2) VALUES (?)";
$stmt = $this->oracleDB->prepare($query);
$stmt->bindValue(1, $attr2, "string");
$stmt->execute();
我还使用绑定系统来更安全地发送变量。不确定是否会影响答案。
我不确定该过程是否是答案,如果是答案,那么在此示例中该过程将如何?
非常感谢。
【问题讨论】:
-
第一个查询和第二个查询是什么关系?
-
如果您有权对数据库进行更改,则可以将两个查询放在一个存储过程中,其中任何失败状态都会回滚任何成功的更改。
-
这是标准交易。确保自动提交关闭,你做 DML。在任何异常情况下进行回滚。
-
你们中的任何人都可以写出对过程的调用和我应该添加到数据库过程中的代码的外观吗?