PHP OCI, Oracle и числовой формат по умолчанию - PullRequest
3 голосов
/ 26 ноября 2010

Когда я выполняю выборку из базы данных Oracle, используя PHP OCI, числа, которые меньше 1, отображаются как .XXXXXX,, например. .249999. Есть ли способ установить это в 0.XXXXXX или в любой другой формат, не изменяя каждый запрос, чтобы явно использовать to_char()? (Возможно, через некоторые параметры сеанса?)

Ответы [ 2 ]

2 голосов
/ 26 ноября 2010

Используя PHP, вы можете легко добавить 0, преобразовав в число с плавающей точкой:

$a = '.249999';
echo (float) $a;

То есть вы можете конвертировать свой номер на

$row['number'] = (float) $row['number'];

после извлечения из БД.

0 голосов
/ 01 декабря 2010

Нет способа сделать то, что вы просите, за исключением изменения исходного кода php / oci-extension. Причина такого поведения заключается в том, что oracle oci пропускает 0 в результатах, а php преобразует все результаты из oci в строки без выполнения приведения в зависимости от типа данных столбца. Даже результаты в SQL * Plus по умолчанию опускают 0, а форматирование SQL * Plus должно вызываться с set numformat для настройки форматирования столбца и добавления перед 0.

В настоящее время нет параметра alter session, который можно установить для изменения этого поведения.

Наиболее распространенный способ обойти это - использовать оболочку вокруг ваших запросов и проверять числовые столбцы с помощью is_numeric, а затем форматировать числовые значения столбцов с помощью number_format или sprintf. Надеемся, что ваше приложение уже использует оболочку для стандартных функций php oci, чтобы вы могли внести изменения в одном месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...