2016-04-10 25 views
0

CLOBというデータ型のフィールドが1つあるOracle表があります。PHPでのOracle CLOBの更新

CLOBの内容を長い文字列(4000文字以上)に置き換えたいとします。

OCI8はPHPを使用してこれを行う最も簡単な方法ですか?

通常のSQLは、単純にこのようなものになるだろう:

アップデートTABLEX 設定clobFieldX = '私の非常に長い文字列' keyField = '値';

私は単純な例を求めていますが、CLOBを 'where something = something'節で更新するものは見つかりません。

http://php.net/manual/en/function.oci-new-descriptor.phpにはinsert文の例があります。私はちょっと試してみますが、挿入例を更新例に変更するだけで簡単ですか?

サイド・ノート:OCIはPHPでOracleと対話する最善の方法ですか?友好的なライブラリ/拡張機能はありますか?

+0

いや、うまくいきませんでした。ダン。 – JasonW

答えて

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); 

}