Я написал скрипт, который делает несколько очень простых вещей:
1) Подключается к базе данных Oracle 10.
2) Проверяет, существует ли временная таблица.
3) Если !exist, создает временную таблицу (копию существующей таблицы)
4) I выполнить некоторые манипуляции с данными в таблице tmp (чтобы имитировать то, что произойдет в рабочей среде)
5) Выполняется запрос, чтобы получить разницу между двумя таблицами, и именно здесь я сталкиваюсь с проблемами. Ниже приведен проблемный блок кода с конкретной функцией, отмеченной звездочками до и после нее.
printf(" Finding difference between current and previous data .......");
$sCmd = sprintf("SELECT * FROM hrms_mview_previous WHERE cstatus='A' MINUS SELECT * FROM hrms_mview_current");
if (!($hDB_Results = oci_parse($hDB, $sCmd)))
{
fprintf(STDERR, "ERROR\n Error in MINUS query.\n\n");
exit(1);
}
else
{
**oci_execute($hDB_Results);**
$iRows = oci_fetch_all($hDB_Results, $aRes);
print_r($aRes);
printf("done\n");
}
oci_free_statement($hDB_Results);
Если я удаляю вызов oci_execute(), код выполняется нормально, и возвращается пустой массив. Если я запускаю тот же запрос, который передается в oci_execute() в Oracle CLI, запрос работает нормально и возвращает ожидаемые данные.
Это вывод скрипта:
Segmentation fault (core dumped)
Я использую PHP версии 5.2.13 на машине Solaris. Кто-нибудь сталкивался с подобным поведением при вызовах oci_execute() раньше? Я немного теряюсь в этом.