Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como usar XML para criar objeto OCI-Lob?


Depois de fazer muita investigação sobre isso, finalmente cheguei a um ponto de entender isso. Não podemos converter diretamente um XML para OCI-Lob Object diretamente. Porque

"O Oracle Call Interface (OCI) é uma interface de programação de aplicativos (API) que permite que aplicativos escritos em C interajam com um ou mais servidores Oracle. possível com o banco de dados Oracle9i, incluindo processamento de instruções SQL e manipulação de objetos."


Que seja como Se tivermos alguma função XMLAGG com getClobVal() no lado da consulta que estamos armazenando como "Val", que retorna o objeto OCI-Lob como abaixo
$Val = OCI-Lob Object
(
    [descriptor] => Resource id #130
)

a função abaixo nos dará o conteúdo XML do objeto OCI-Lob [CLOB DataType], que mencionei nas perguntas.
$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;
                }
            }

Agora, se eu remover load() de printVar($row['Val']->load()) e fizer printVar($row['Val']) ele retornará novamente o objeto OCI-Lob.

Para obter o objeto OCI-Lob Precisamos do Oracle Select Query, além disso, podemos passar XMLAttributes/Elements com getClobVal() ou qualquer função. Mas não podemos analisar XML e convertê-lo em objeto OCI-Lob, pois ele sempre interage com o banco de dados/servidor Oracle.

Então, para executar o teste da unidade PHP, o que eu fiz foi pegar o XML e convertê-lo em um OCIMockObject, que terá todos os valores XML e analisá-lo para a função.

Funcionou!

Este link é útil para saber mais sobre Oracle Call Interface(OCI )

Obrigado.