【问题标题】:how to update a LOB with PHP in oracle? (OCI_INVALID_HANDLE)如何在 oracle 中使用 PHP 更新 LOB? (OCI_INVALID_HANDLE)
【发布时间】:2013-05-08 13:26:00
【问题描述】:

我正在尝试以与插入相同的方式更新 (C)LOB。 (插入已经在工作)。

$queryHandle = oci_parse($dbHandle, "update MYTABLE set "MYCLOB" = EMPTY_CLOB() , "OTHERCOL" = :col0 where "PKIDCOL" = :wherecol0 returning "OTHERCOL" , "MYCLOB", into :retcol0 , :retcol1");
if(!is_resource($queryHandle)) {
$error=oci_error($dbHandle);
die($error['message'], $error['code']);
}
oci_bind_by_name($queryHandle, ":col0", $othercolvalue);
oci_bind_by_name($queryHandle, ":wherecol0", $pkidcol);
oci_bind_by_name($queryHandle, ":retcol0", $retcol1, 100);
$lob=oci_new_descriptor($dbHandle);
oci_bind_by_name($queryHandle, ":retcol1", $lob, -1, SQLT_CLOB);
if(!oci_execute($queryHandle , OCI_NO_AUTO_COMMIT)) {
$error=oci_error($dbHandle);
die($error['message'], $error['code']);
}
$lob->save($mylobvalue);  // gives an  PHP Warning:  OCI-Lob::save(): OCI_INVALID_HANDLE in file.php on line 123

这不会更新 lob 并给出:PHP Warning: OCI-Lob::save(): OCI_INVALID_HANDLE in file.php on line 123

【问题讨论】:

  • 这在文档中提到:If you are using Save() on an update statement, PHP will throw a warning similar to "OCILobWrite: OCI_INVALID_HANDLE..." if your update statement did not catch any rows with its where clause. 因此,在更新数据库之前,您需要确保您的条件匹配。在您的示例中,$queryHandle 对保存有效。
  • 谢谢。确实是这个问题。 :-)

标签: php oracle oracle11g


【解决方案1】:

有许多示例说明如何插入/更新具有LOB 值的行。

首先,你要创建一个LOB描述符:

$desc = oci_new_descriptor($connection, OCI_DTYPE_LOB);

然后将此描述符用作LOB 占位符的绑定值:

oci_bind_by_name($queryHandle, ":retcol1", $desc, -1, SQLT_CLOB);

然后临时写入数据:

$desc->writeTemporary($data);

然后执行该查询...

更多信息请访问documentation + 仔细阅读所有 cmets 以获得更多示例!

一些例子使用$desc->write($data); + 执行 + 提交,一些使用执行 + $desc->saveFile($data); + 提交,都应该工作。

【讨论】:

    【解决方案2】:

    正如 PLB 所说:由于主键值错误,更新查询没有更新任何行。这导致了 php 警告消息。

    http://www.oracle.com/technetwork/articles/fuecks-lobs-095315.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-24
      • 1970-01-01
      • 2012-08-29
      • 1970-01-01
      • 2015-07-02
      • 2022-08-16
      • 1970-01-01
      相关资源
      最近更新 更多