Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Db2 SQL是否有JDFTVAL等价物?_Db2_Ibm Midrange_Rpgle - Fatal编程技术网

Db2 SQL是否有JDFTVAL等价物?

Db2 SQL是否有JDFTVAL等价物?,db2,ibm-midrange,rpgle,Db2,Ibm Midrange,Rpgle,对于Iseries/IBMi DB2 我正在将多个文件/表连接在一起 我已经用DDS和SQL编写了代码 DDS逻辑文件完全按照预期工作,但我不能将其用于rpgle中的嵌入式sql,因为它默认为SQE引擎,导致了可怕的性能 另一方面,在我使用IFNULL MBRDESCR之前,SQL视图具有null。但是现在MBRDECSR是一个VARCHAR。这是不能接受的 那么,如何创建没有null和varchar的SQL连接呢 请求的示例代码: DDS: SQL: 请注意以下事项: 上面的例子被简化了 不是

对于Iseries/IBMi DB2

我正在将多个文件/表连接在一起

我已经用DDS和SQL编写了代码

DDS逻辑文件完全按照预期工作,但我不能将其用于rpgle中的嵌入式sql,因为它默认为SQE引擎,导致了可怕的性能

另一方面,在我使用IFNULL MBRDESCR之前,SQL视图具有null。但是现在MBRDECSR是一个VARCHAR。这是不能接受的

那么,如何创建没有null和varchar的SQL连接呢

请求的示例代码:

DDS:

SQL:

请注意以下事项:

上面的例子被简化了

不是TRANSPF中的每个MBRID在MBRPF ie中都有相应的条目。没有引用约束。因此,当MBRPF连接到TRANSPF时,MBRNAME、MBRSURNME中会有空值。除非使用JDFTVAL或IFNULL

我不喜欢使用VARCHAR,因为rpgle中的性能和extname

我不希望有空值,我不希望pgm必须处理它们


假设您不希望看到的是“允许空值”,请使用并集。第一个选择选择所有匹配的行,这将为您设置NOTNULL属性。第二个选择选择所有不匹配的行-为这些行提供填充字段

CREATE VIEW TRANSV01 AS (                 
    SELECT TRANSID                                 ,
           MBRID                                   ,                 
           MBRNAME  ,
           MBRSURNME
    FROM TRANSPF
    --Member Name                                                               
    JOIN MBRPF on MBRID = MBRID     
  UNION
    SELECT TRANSID                                 ,
           MBRID                                   ,                 
           CAST('') as Char(20)) ,                 
           CAST('') as Char(25))                  
    FROM TRANSPF
    --Member Name                                                               
    EXCEPTION JOIN MBRPF on MBRID = MBRID     
) RCDFMT TRANSR;                                             

我不明白整个问题。对我来说,至少一点你在DDS中所做的事情会有所帮助。我可以帮助您解决不可接受的varchar问题,尽管我不明白为什么这会是一个问题。只需使用CASTIFNULLMBRDESCR,如CHAR50。我同意丹尼斯的观点。请同时显示您现有的SQL代码。因此,如果我在MBRID=MBRID上正确读取了超出权限的JOIN-MBRPF之外的代码,那么即使该代码不能解决问题,也会给您一个错误,对吗?还是问题依然存在?我本来打算对性能和extname评论发表评论,但决定不发表评论。不客气@丹尼斯,没错演员阵容确实解决了这个问题。此外,JOIN M=M将导致错误。也就是说,除非MBRNAME和/或MBRSURNME具有空值。那么这将不会产生预期的效果。真的!然而,如果OP在DDS中使用ALWNULL,他可能不会担心SQL的“允许空值”。如果真的有空值,他需要额外的联合来单独处理它们。丑陋的当然是。这是接受关系数据库中存在空值并开始在代码库中处理它们的一个很好的理由,而不是为了让它们消失而付出难堪的努力。@BuckCalabro,谢谢。在代码中处理它是。@BuckCalabro在与多个供应商合作时尤其如此。例如,在Oracle中,不带空格和NULL之间没有区别。换句话说,对于DB引擎,空字符串是NULL。给我带来的挫折永无止境。他们似乎认为这是应该的;这不是虫子。例如:保证永远不匹配,因为没有任何值等于、大于或小于NULL。甚至不是空的。 CREATE VIEW TRANSV01 AS ( SELECT TRANSID , MBRID , CAST(IFNULL(MBRNAME , '') as Char(20)) , CAST(IFNULL(MBRSURNME, '') as Char(25)) FROM TRANSPF --Member Name LEFT OUTER JOIN MBRPF on MBRID = MBRID ) RCDFMT TRANSR;
CREATE VIEW TRANSV01 AS (                 
    SELECT TRANSID                                 ,
           MBRID                                   ,                 
           MBRNAME  ,
           MBRSURNME
    FROM TRANSPF
    --Member Name                                                               
    JOIN MBRPF on MBRID = MBRID     
  UNION
    SELECT TRANSID                                 ,
           MBRID                                   ,                 
           CAST('') as Char(20)) ,                 
           CAST('') as Char(25))                  
    FROM TRANSPF
    --Member Name                                                               
    EXCEPTION JOIN MBRPF on MBRID = MBRID     
) RCDFMT TRANSR;