Como usar o XML para criar OCI-Lob Object?

Eu tenho um Oracle Query, que retorna o resultado abaixo: –

stdClass Object ( [START_TIME] => 2015/01/04 06:03:07 [END_TIME] => 2015/01/04 06:27:27 [STATUS] => Error [NODE] => DEVSERVER1 [CTRL_GROUP] => DEV_ORA [SERVER_NUMBER] => 1001 [JOB_NAME] => Oracle Process [STEP_INFORMATION] => OCI-Lob Object ( [descriptor] => Resource id #165 ) ) 

Nessa, a informação passo é proveniente de uma function getClobVal () que se encontra dentro da Oracle Query. Extrai os conteúdos XML executando o código abaixo para a informação de etapa –

 $stmt = oci_parse($this->oraConn, $query); oci_execute($stmt, OCI_DEFAULT); $r = oci_fetch_array($stmt, OCI_RETURN_NULLS+OCI_RETURN_LOBS); echo "
"; echo htmlentities($r["STEP_INFORMATION"]); echo "

"; exit;

Eu tenho abaixo XML –

  oracle_load_script 10089 3  

Estou trabalhando em um teste de unidade PHP no qual eu preciso passar a input da mesma forma que a saída Oracle, mas sem usar a consulta Oracle ou conectar-me a qualquer database. Tentei usar o JSON e também criar um object em PHP para simular a input, mas não consegui representar o object OCI-Lob.

Quero saber como posso usar o XML acima para criar o object OCI-Lob como abaixo, para que eu possa simular isso na input e passá-lo no teste de unidade.

 [STEP_INFORMATION] => OCI-Lob Object ( [descriptor] => Resource id #165 ) 

Eu procurei quase todos os tópicos relacionados ao OCI-Lob em PHP, mas não obtive as informações que estou procurando.

Espero que você entenda a minha pergunta. Qualquer sugestão sobre isso seria apreciada.

Obrigado.

Depois de fazer muita investigação sobre isso, finalmente cheguei a 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 as aplicações escritas em C interagem com um ou mais Servidores Oracle. OCI oferece aos seus programas a capacidade de executar a gama completa de operações de database que são possíveis com o Oracle9i database, incluindo processamento de instruções SQL e manipulação de objects “.

Deixe que seja como se tivéssemos qualquer function XMLAGG com getClobVal () no lado da consulta que estamos armazenando como “Val” que retorna OCI-Lob Object como abaixo

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

A function abaixo nos dará os Conteúdos XML do OCI-Lob Object [CLOB DataType], que eu 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 fazer printVar ($ row [‘Val’]), novamente, retornará o Objeto OCI-Lob.

Para obter OCI-Lob Object Nós precisamos Oracle Select Query, além disso, podemos passar XMLAttributes / Elements com getClobVal () ou qualquer function. Mas não podemos analisar XML e convertê-lo para OCI-Lob Object, pois sempre interage com o Oracle Database / Server.

Então, para executar o teste da Unidade PHP, fiz o que fiz, tomei o XML e converti isso em OCIMockObject, que terá todos os valores XML e analisá-lo-á na function.

Funcionou!

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

Obrigado.

    Intereting Posts