1

我正在尝试以与插入相同的方式更新(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

4

2 回答 2

2

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

首先,您必须创建一个LOB描述符:

$desc = oci_new_descriptor($connection, OCI_DTYPE_LOB);

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

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

然后临时写入数据:

$desc->writeTemporary($data);

然后执行该查询......

可以在文档中找到更多信息+ 仔细阅读所有评论以获取更多示例!

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

于 2013-05-14T10:09:20.207 回答
0

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

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

于 2013-05-14T13:17:02.423 回答