Как использовать XML для создания объекта OCI-Lob?

У меня есть Oracle Query, который возвращает следующий вывод: —

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
)
)

При этом информация о шаге поступает из функции getClobVal (), которая присутствует в Oracle Query. Я извлек содержимое XML, запустив приведенный ниже код для информации о шаге —

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

Я получил ниже XML —

<orastep number="9">
<ora_name>oracle_load_script</ora_name>
<ora_selection>10089</ora_selection>
<ora_selection_ind>3</ora_selection_ind>
</orastep>

Я работаю над модульным тестом PHP, в котором мне нужно передать входные данные так же, как выходные данные Oracle, но без использования запроса Oracle или подключения к какой-либо базе данных. Я попытался использовать JSON, а также создать объект в PHP для имитации ввода, но я не смог представить объект OCI-Lob.

Я хочу знать, как я могу использовать вышеуказанный XML для создания объекта OCI-Lob, как показано ниже, чтобы я мог смоделировать это при вводе и передать его в модульном тесте.

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

Я искал почти все темы, связанные с OCI-Lob в PHP, но не получил информацию, которую я ищу.

Надеюсь, вы понимаете мой вопрос. Любые предложения по этому вопросу будут оценены.

Спасибо.

2

Решение

После тщательного изучения этого вопроса, наконец, я пришел к пониманию этого. Мы не можем напрямую конвертировать XML в объект OCI-Lob напрямую. Так как

«Oracle Call Interface (OCI) — это интерфейс прикладного программирования (API), который позволяет приложениям, написанным на C, взаимодействовать с одним или несколькими серверами Oracle. OCI дает вашим программам возможность выполнять весь спектр операций с базами данных, которые возможны с Oracle9i. базы данных, включая обработку операторов SQL и манипулирование объектами. «

Пусть будет так: если у нас есть какая-либо функция XMLAGG с getClobVal () в стороне от запроса, который мы храним как «Val», который возвращает объект OCI-Lob, как показано ниже

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

функция ниже даст нам XML-содержимое объекта OCI-Lob [CLOB DataType], о котором я упоминал в Вопросах.

$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;
}
}

Теперь, если я удаляю load () из printVar ($ row [‘Val’] -> load ()) и выполняю printVar ($ row [‘Val’]), он снова вернет мне объект OCI-Lob.

Чтобы получить объект OCI-Lob Нам нужен Oracle Select Query. Кроме того, мы можем передавать XMLAttributes / Elements с помощью getClobVal () или любой другой функции. Но мы не можем проанализировать XML и преобразовать его в объект OCI-Lob, поскольку он всегда взаимодействует с базой данных / сервером Oracle.

Поэтому для запуска модульного теста PHP я взял XML и преобразовал его в OCIMockObject, который будет иметь все значения XML, и проанализировал его для функции.

Это сработало!

Эта ссылка полезна, чтобы узнать больше о Интерфейс вызова Oracle (OCI)

Благодарю.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]