Я пытаюсь сделать обновление (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
Существуют десятки примеров того, как вставлять / обновлять строку со значением 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, все должно работать.
Как сказал PLB: запрос обновления не обновлял строки из-за неправильного значения первичного ключа. Это привело к сообщению об ошибке php.
http://www.oracle.com/technetwork/articles/fuecks-lobs-095315.html