instant - php y oracle ejemplos
¿Cómo actualizar un LOB con PHP en Oracle?(OCI_INVALID_HANDLE) (2)
Estoy tratando de hacer una actualización de un (C) LOB de la misma manera que hago un inserto. (insertar ya está funcionando).
$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
esto no actualiza el lob y le da una: PHP Warning: OCI-Lob::save(): OCI_INVALID_HANDLE in file.php on line 123
Como dijo PLB: la consulta de actualización no actualizó ninguna fila debido a un valor erróneo de la clave primaria. Esto llevó al mensaje de advertencia php.
http://www.oracle.com/technetwork/articles/fuecks-lobs-095315.html
Hay docenas de ejemplos de cómo insertar / actualizar una fila con un valor LOB
.
Antes que nada, debes crear un descriptor LOB
:
$desc = oci_new_descriptor($connection, OCI_DTYPE_LOB);
A continuación, utilice este descriptor como su valor de enlace para el marcador de posición LOB
:
oci_bind_by_name($queryHandle, ":retcol1", $desc, -1, SQLT_CLOB);
Luego, temporal escribe los datos:
$desc->writeTemporary($data);
Y después de eso ejecuta esa consulta ...
Se puede encontrar más información en la documentación + leer atentamente todos los comentarios para obtener más ejemplos.
Algunos ejemplos usan $desc->write($data);
+ execute + commit, algunos usos execute + $desc->saveFile($data);
+ compromiso, todo debería funcionar.