Столбец суммы с Oracle 11 и PHP - что не так? - PullRequest
0 голосов
/ 21 октября 2019

Попытка выполнить простой запрос и он не работает - новичок здесь.

Другие php-файлы и запросы работают хорошо.

    $sql = "select sum(rese_nshw) as noshows from tnht_eseo where edta_data = '19.10.01'" ;

   $sumParse = oci_parse($conn, $sql);

   oci_define_by_name($sumParse, "noshows", $total);

   oci_execute($sumParse);

   while(oci_fetch($sumParse)){
       echo "noshows:". $total;
   }

что не так? просто выводит пустое значение.

При непосредственном выполнении запроса SQL в Oracle выводится 6 как NOSHOWS для этого запроса.

Ответы [ 2 ]

2 голосов
/ 21 октября 2019

Если EDTA_DATA равно date (тип данных), не сравнивайте его со строкой, так как '19.10.01' является строкой. Oracle неявно попытается преобразовать его в соответствующую дату, но это не всегда должно работать. Кроме 19.10.01 может быть что угодно (2019 окт 01, или 19 окт 2001, или ...), зависит от настроек NLS.

Взять под контроль;Посмотрите, помогает ли использование литерала даты (он всегда имеет формат yyyy-mm-dd):

where edta_data = date '2019-10-01'

Кроме того, если edta_data содержит компонент времени (часы, минуты, секунды), тогда самый простой вариант - обрезать егоНапример,

where trunc(edta_data) = date '2019-10-01'

, но это не позволит Oracle использовать индекс для этого столбца (если он существует). Это можно исправить, нет проблем;но - сначала посмотрим, поможет ли что-либо из перечисленного выше.

1 голос
/ 21 октября 2019

Вы должны использовать верхний регистр, как определено здесь:

column_name Имя столбца, используемое в запросе.

Используйте верхний регистр для имен столбцов Oracle по умолчанию, без учета регистра. Используйте точный регистр имен столбцов для чувствительных к регистру имен столбцов.

from: https://www.php.net/manual/en/function.oci-define-by-name.php

Тогда: oci_define_by_name ($ sumParse, "NOSHOWS", $ total);

...