Написах скрипт, който прави няколко много прости неща:
1) Свързва се с база данни на Oracle 10.
2) Проверява дали съществува tmp таблица.
3) Ако !exist, създава tmp таблица (копие на съществуваща таблица)
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() преди? Аз съм малко на загуба по този въпрос.