2013-10-09 3 views
4

Мне сказал наш программист RPG, что ни одна из наших таблиц базы данных DB2 на базе AS400 не может допускать нулевые значения, потому что нулевые значения «действительно сложно запрограммировать» в RPG. Я хотел бы знать, действительно ли это так, и если да, то что делает эту базовую базу данных настолько трудной для использования в RPG?Нуль не разрешено при программировании RPG?

Я понимаю, что это может быть немного из-за возможности переполнения стека, но это лучший источник, который я знаю для такого рода информации.

+2

СЧ программист имеет большую рецензию на ассоциированная проблемы в этой статье: [NULL Nemisis] (http://www.itjungle.com/mpo/mpo082803-story02.html). –

+0

Coalesce/NullVal/et al. Позволяют складывать NULL в значения в DB. Поэтому достаточно просто избежать возврата NULL из запросов. – ChuckCottrill

+0

Обратите внимание, что при наличии достойного дизайна таблицы/сущности/запроса нули могут быть несколько обходящими; возьмите пример 'ShipDate' в ссылке @Carl, если он был частью другой таблицы (например,' ShippingDetail'), тогда вся запись не будет существовать (это будет «нулевая» запись). Конечно, устаревшие базы данных RPG не всегда известны соблюдением даже первой нормальной формы, поэтому вам может быть не повезло в любом случае ... Лично создайте/получите доступ к новым таблицам с SQL, разрешите нули и просто напишите запросы для перевода для тебя. Таким образом, БД не нужно менять, когда язык делает. –

ответ

1

Ответ оказывается, что «NULLS: разрешено, но для этого требуется дополнительная работа». Пользователь Carl Groner прокомментировал это ссылкой на excellent article, что объясняет это с точки зрения программиста RPG. Вот уместная часть, которая применима к моей проблеме:

RPG/400 не поддерживает обработку NULL в файле базы данных. Если файл содержит NULL, указав параметр компилятора ALWNULL (* YES) на , команда Create RPG Program (CRTRPGPGM) позволяет программе получить доступ к файлу только в качестве входных данных, с оговоркой, что все поля с нулевым значением содержат Значение «по умолчанию» при обнаружении NULL. Этот означает, что программа RPG/400 не будет отличать NULL от пустого, например.

+0

Ссылка на http://www.itjungle.com/mpo/mpo082803-story02.html, о которой говорилось выше, теперь нарушена. – mike

0

IBM RPG настоящее время не поддерживает обработку аннулирует напрямую, но они могут быть обработаны в вызове SQL с помощью ISNULL встроенной функции:

exec sql declare X cursor for 
select ISNULL(numfield, 0), 
     ISNULL(alphafield, '') 
from table 
where field = value 
for read only;