如何使用PHP更新oracle上的CLOB列



我对函数有问题

function updateClob($id_tow,$description_csv,$conn) {
$sql = "UPDATE SHOPPER_PRODUCTS SET SHOP_TO_DESCRIPTION = EMPTY_CLOB() WHERE ID_TOW = 
'$id_tow' RETURNING SHOP_TO_DESCRIPTION INTO :lob";
echo $sql."n";
//echo $sql."n";
$clob = OCINewDescriptor($conn, OCI_D_LOB);
$stmt = OCIParse($conn, $sql);
OCIBindByName($stmt, ':lob', $clob, -1, OCI_B_CLOB);
OCIExecute($stmt,OCI_DEFAULT);
if($clob->save($description_csv)){
OCICommit($conn);
echo " Updated"."n";
}else{
echo " Problems: Couldn't upload Clob.  This usually means the where 
condition had no match n";
}
$clob->free();
OCIFreeStatement($stmt);
}

执行后,我得到";更新的";但数据库中的列为空。在执行之前,我在这列上有null。

这里有两种方法。模式为:

create table photo_tab (photo blob, photo_id number);

代码如下:

// Update an existing BLOB
$photo_id = 1;
$stid = oci_parse($con, "insert into photo_tab (photo, photo_id) values(empty_blob(), :photo_id)");
$r = oci_bind_by_name($stid, ":photo_id", $photo_id);
$r = oci_execute($stid, OCI_DEFAULT);
oci_commit($con);

$sql = "update photo_tab set photo = empty_blob() where photo_id = :photo_id returning photo into :photo";
$stid = oci_parse($con, $sql);
$blob = oci_new_descriptor($con, OCI_D_LOB);
oci_bind_by_name($stid, ":photo_id", $photo_id);
oci_bind_by_name($stid, ":photo", $blob, -1, OCI_B_BLOB);
$r = oci_execute($stid, OCI_NO_AUTO_COMMIT);
$blob->savefile("/tmp/oraclelogo.jpg");
$blob->free();
oci_commit($con);
oci_free_statement($stid);
// Update an existing BLOB using a Temp BLOB
$photo_id = 2;
$stid = oci_parse($con, "insert into photo_tab (photo, photo_id) values(empty_blob(), :photo_id)");
$r = oci_bind_by_name($stid, ":photo_id", $photo_id);
$r = oci_execute($stid, OCI_DEFAULT);
oci_commit($con);

$sql = "update photo_tab set photo = :photo where photo_id = :photo_id";
$stid = oci_parse($con, $sql);
$blob = oci_new_descriptor($con, OCI_D_LOB);
oci_bind_by_name($stid, ":photo_id", $photo_id);
oci_bind_by_name($stid, ":photo", $blob, -1, OCI_B_BLOB);
$blob->writeTemporary("/tmp/oraclelogo.jpg");
$r = oci_execute($stid, OCI_NO_AUTO_COMMIT);
$blob->close();
oci_commit($con);
oci_free_statement($stid);

您可能想看看Oracle免费PHP书籍《地下PHP和Oracle手册》的后半部分。

最新更新