对于 Iseries/IBMi DB2。
我将多个文件/表连接在一起。
我已经在 DDS 和 SQL 中编写了代码。
DDS 逻辑文件完全按预期工作,但我不能将它用于 rpgle 中的嵌入式 sql,因为它默认为 SQE 引擎,从而导致可怕的性能。
另一方面,SQL 视图在NULLs
我使用IFNULL( MBRDESCR, '')
. 但现在MBRDECSR
是一个VARCHAR
。这是不可接受的。
那么如何在没有NULLs
and的情况下创建 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 必须处理它们。