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