Используйте формат S
и replace
стандартные знаки +/- с требуемыми кодами
Вы можете пропустить NVL
, если ваши числовые столбцы не обнуляются. [ 119]
Агрегированная функция SUM
часто используется с PARTITION BY
для различения счетов - см. Комментарий в запросе.
with bal as (
select
id, cr, dr,
sum(nvl(cr,0) - nvl(dr,0)) over (/* PARTITION BY account key */ ORDER BY id) as balance
from accounting)
select
id, dr db,cr,
replace(replace(to_char(balance,'999,999.99S'),'+','CR'),'-','DB') balance
from bal
order by id;
ID DB CR BALANCE
---------- ---------- ---------- ----------------
1 1000 0 1,000.00DB
2 0 200 800.00DB
3 500 0 1,300.00DB
4 0 200 1,100.00DB
5 0 200 900.00DB
6 0 1800 900.00CR
Darryl Hein,
Да, в журналах ошибок нет ничего. Я даже увеличил сообщение об ошибке и тем не менее ничто соответствующее для print_r ().
В ответ на Сойку: Я работал
echo count($lines);
и я получаю результат 105 546, но все еще print_r () только отображается 7280.
Слушая совет Rob Walker, который я циклично выполнил по всем элементам в массиве и он на самом деле содержал все результаты. Это приводит меня полагать, что проблема с print_r () самим вместо предела для выстраивания размера.
Другая странная вещь состоит в том, что я попробовал его на одном из моих серверов REHL, и результат состоял в том, как это должно быть. Теперь я не хочу обвинять это в Windows/IIS, но там Вы идете.
С вышеупомянутым в памяти я думаю, что этот вопрос должен быть повторно назван, поскольку это больше не относится к массивам, но print_r.
Править: Как Rob сказал, если Ваше приложение исчерпывает память, возможности - это, даже не доберется до print_r
строка. Это - вид моей догадки также, но если это - проблема памяти, следующее могло бы помочь.
Смотрите в файле php.ini для этой строки и возможно увеличьте его до 16 или больше.
memory_limit = 8M
Если у Вас нет доступа к php.ini (например, если это происходило на общем сервере), можно зафиксировать его с a .htaccess
файл как это
php_value memory_limit 16M
По-видимому, некоторые хосты не позволяют Вам делать это все же.
Действительно ли возможно, что существует свойственный предел на вывод от print_r. Я предложил бы искать первую и последнюю строку в файле, чтобы видеть, находятся ли они в массиве. При ударе предельной вставки памяти в массив, Вы никогда не добирались бы до print_r строки.
Два предложения:
Считайте фактическое количество объектов в массиве и посмотрите, является ли массив корректным количеством записей (поэтому устранение или идентификация print_r()
как преступник)
Проверьте вход... шанс, что окончания строки в файле вызывают проблему? Например, есть ли соединение различных типов окончаний строки? См. страницу руководства для file()
и примечание о auto_detect_line_endings
установка также, хотя маловероятно, что это связано с окончаниями строки Mac.
Я полагаю, что это основано на объеме доступной памяти, как установлено в файле php.ini.
каждый раз, когда у меня закончилась память в PHP, я получил сообщение об ошибке, заявив тот факт. Так, я также сказал бы, что, если бы у Вас заканчивается память затем, сценарий не добрался бы до print_r()
попытайтесь включить auto_detect_line_endings
в php.ini или при помощи
ini_set('auto_detect_line_endings', 1)
. Могут быть некоторые окончания строки, которые не понимают окна, и эта ini опция могла помочь. больше информации об этой ini опции может быть найдено здесь
Необходимо использовать count
считать количество объектов в массиве, нет print_r
. Что, если вывод этого большого массива был прерван из-за тайм-аутов или чего-то еще? Или некоторая ошибка/функция в print_r
?
PHP's print_r
функция действительно имеет ограничения. Однако даже при том, что Вы не "видите" распечатанного целого массива, это - все там. Я боролся с этой той же проблемой при печати больших объектов данных.
Это делает отладку трудного, если необходимо видеть целый массив, Вы могли бы создать цикл для печати каждой строки.
foreach ($FileLines as $Line) echo $Line;
Это должно позволить Вам видеть все строки без ограничения.
Я собираюсь соглашаться с Cory. Я думаю, что Ваш PHP, вероятно, настроен память по умолчанию 8 МБ, которые 4 МБ x 2 уже больше. Причина x2 состоит в том, потому что необходимо загрузить файл, затем для создания массива, у Вас должен быть файл в памяти снова. Я просто предполагаю, но это имело бы смысл.
Вы - верный PHP, не регистрирует ошибку?
Если Вы производите к чему-то как Internet Explorer, Вы могли бы хотеть удостовериться, что он может отобразить всю информацию, которую Вы пытаетесь поместить там. Я знаю, что существует предел странице HTML, но я не уверен, каково это.