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

これはロブを更新せず、次のようになります。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);+ execute + commit を使用する例もあれば、execute + $desc->saveFile($data);+ commit を使用する例もありますが、すべて動作するはずです。

于 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 に答える