У меня есть 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, но не получил информацию, которую я ищу.
Надеюсь, вы понимаете мой вопрос. Любые предложения по этому вопросу будут оценены.
Спасибо.
После тщательного изучения этого вопроса, наконец, я пришел к пониманию этого. Мы не можем напрямую конвертировать XML в объект OCI-Lob напрямую. Так как
Пусть будет так: если у нас есть какая-либо функция 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)
Благодарю.
Других решений пока нет …