我们的 RPG 程序员告诉我,我们基于 AS400 的 DB2 数据库表都不允许空值,因为空值在 RPG 中“真的很难编程”。我想知道这是否真的是真的,如果是的话,是什么让这个基本的数据库功能在 RPG 中如此难以使用?
我意识到这可能稍微超出了 Stack Overflow 的范围,但这是我所知道的此类信息的最佳来源。
我们的 RPG 程序员告诉我,我们基于 AS400 的 DB2 数据库表都不允许空值,因为空值在 RPG 中“真的很难编程”。我想知道这是否真的是真的,如果是的话,是什么让这个基本的数据库功能在 RPG 中如此难以使用?
我意识到这可能稍微超出了 Stack Overflow 的范围,但这是我所知道的此类信息的最佳来源。
答案是“允许使用NULL,但需要额外的工作”。用户 Carl Groner 在上面评论了一篇优秀文章的链接,该文章从 RPG 程序员的角度解释了这一点。这是适用于我的问题的相关部分:
RPG/400 不支持处理数据库文件中的 NULL。如果文件包含 NULL,则在 Create RPG Program (CRTRPGPGM) 命令上指定 ALWNULL(*YES) 编译器选项允许程序仅将文件作为输入来访问,但需要注意的是所有支持 NULL 的字段都包含“默认”值当遇到 NULL 时。例如,这意味着 RPG/400 程序将无法区分 NULL 和空白。
IBM RPG 当前不支持直接处理空值,但可以使用内置函数 ISNULL 在 SQL 调用中处理它们:
exec sql declare X cursor for
select ISNULL(numfield, 0),
ISNULL(alphafield, '')
from table
where field = value
for read only;