我有一个带有1个数据类型CLOB字段的Oracle表。
我想用长字符串(超过4,000个字符)替换CLOB的内容。
使用PHP,OCI8是最简单的方法吗?
常规sql就是这样的:
更新TableX 设置clobFieldX ='我的长字符串' 其中keyField ='value';
我一直在谷歌搜索一个简单的例子,但找不到一个用'where something = something'子句更新CLOB。
http://php.net/manual/en/function.oci-new-descriptor.php有一个insert语句的例子。我会稍微尝试一下,但它就像将插入示例更改为更新示例一样简单吗?
旁注:OCI是使用PHP与Oracle交互的最佳方式吗?是否有更友好的库/扩展名?
答案 0 :(得分:1)
This worked: function updateClob($groupId,$memberList,$conn) {
$sql = "UPDATE LP_GROUP SET MEMBER_EXPR_XML = EMPTY_CLOB() WHERE GROUP_ID = '$groupId' RETURNING MEMBER_EXPR_XML INTO :lob";
//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($memberList)){
OCICommit($conn);
echo $groupId." Updated"."\n";
}else{
echo $groupId." Problems: Couldn't upload Clob. This usually means the where condition had no match \n";
}
$clob->free();
OCIFreeStatement($stmt);
}