sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo usar XML para crear un objeto OCI-Lob?

Después de investigar mucho sobre esto, finalmente he llegado a un punto de entender esto. No podemos convertir directamente un objeto XML a OCI-Lob directamente. Porque

"La interfaz de llamadas de Oracle (OCI) es una interfaz de programación de aplicaciones (API) que permite que las aplicaciones escritas en C interactúen con uno o más servidores de Oracle. OCI brinda a sus programas la capacidad de realizar la gama completa de operaciones de base de datos que son posible con la base de datos Oracle9i, incluido el procesamiento de sentencias SQL y la manipulación de objetos".

Que sea como si tuviéramos alguna función XMLAGG con getClobVal() dentro de la consulta que estamos almacenando como "Val" que devuelve el objeto OCI-Lob como se muestra a continuación

$Val = OCI-Lob Object
(
    [descriptor] => Resource id #130
)

la siguiente función nos dará el contenido XML del objeto OCI-Lob [tipo de datos CLOB], que he mencionado en las preguntas.

$this->$conn = oci_connect('user', 'password', 'connectionString');
$query = "Some SELECT Query";    
$stmt = oci_parse($this->oraConn, $query);      
    oci_execute($stmt);
            while($row = oci_fetch_assoc($stmt)){
                if($row['Val'] != false){
                    printVar($row['Val']->load());
                    break;
                }
            }

Ahora, si elimino load() de printVar($row['Val']->load()) y hago printVar($row['Val']), me devolverá nuevamente el objeto OCI-Lob.

Para obtener el objeto OCI-Lob necesitamos Oracle Select Query, además podemos pasar XMLAttributes/Elements con getClobVal() o cualquier función. Pero no podemos analizar XML y convertirlo en OCI-Lob Object, ya que siempre interactúa con Oracle Database/Server.

Entonces, para ejecutar la prueba de unidad de PHP, lo que hice fue tomar el XML y convertirlo en un OCIMockObject, que tendrá todos los valores XML y los analizará para la función.

¡Funcionó!

Este vínculo es útil para obtener más información sobre Interfaz de llamadas de Oracle (OCI )

Gracias.