对于 Iseries/IBMi DB2。
我将多个文件/表连接在一起。
我已经在 DDS 和 SQL 中编写了代码。
DDS 逻辑文件完全按预期工作,但我不能将它用于 rpgle 中的嵌入式 sql,因为它默认为 SQE 引擎,从而导致可怕的性能。
另一方面,SQL 视图在NULLs我使用IFNULL( MBRDESCR, ''). 但现在MBRDECSR是一个VARCHAR。这是不可接受的。
那么如何在没有NULLsand的情况下创建 SQL 连接VARCHARs?
要求的示例代码:
DDS:
JDFTVAL
R TRANSR JFILE(TRANSPF MBRPF)
J 加入(1 2)
JFLD(MBRID MBRID)
*
TRANSID JREF(1)
MBRID JREF(1)
MBRNAME JREF(2)
MBRSURNME JREF(2)
*
K TRANSID
K MBRID
SQL:
创建视图 TRANSV01 为 (
选择 TRANSID ,
,
CAST(IFNULL(MBRNAME , '') as Char(20)) ,
CAST(IFNULL(MBRSURNME, '') as Char(25))
来自 TRANSPF
- 成员名字
MBRID 上的左外连接 MBRPF = MBRID
) RCDFMT TRANSR;
请注意以下事项:
上面的例子是简化的
不是 TRANSPF 中的每个 MBRID 在 MBRPF 中都有对应的条目(即没有引用约束)。因此,当 MBRPF 加入 TRANSPF 时,MBRNAME、MBRSURNME 中将有 NULL 值。除非使用 JDFTVAL 或 IFNULL()。
由于 rpgle 中的性能和 extname(),我不喜欢使用 VARCHAR。
我不希望有 NULL 值,我不希望 pgm 必须处理它们。