oci_connect instant fatal error ejemplos ejemplo php oracle oracle11g

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



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.