sql—如何调用采用日期参数的DB2AS400表值函数

fgw7neuy  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(306)

我有一个表值函数,如下所示

CREATE FUNCTION ABELIBLE.TVFBOEGETSHIPMENTS (STARTDATE DATE, ENDDATE DATE, ADDRESSCODE CHAR(9))
        RETURNS TABLE (ID INT, JOBNUMBER CHAR(9), CUSTOMERREFERENCE CHAR(18), 
        CONSIGNEENAME CHAR(30), CREATEDDATE DATE, AIRPORTOFORIGIN CHAR(3), AIRPORTOFARRIVAL CHAR(3),
        AIRPORTOFDESTINATION CHAR(3), COUNTRYOFDESTINATION CHAR(3), ADDRESSCODE CHAR(9), CONSIGNMENTNUMBER CHAR(25))
        LANGUAGE SQL
        NOT DETERMINISTIC
        READS SQL DATA
        RETURN
            SELECT  
                     ROW_NUMBER() OVER(ORDER BY EMJOBN DESC),  
                     A.EMJOBN,  
                     A.EMCREF,  
                     A.EMOSNM,
                     DATE(TIMESTAMP_FORMAT(DIGITS(A.EMCRTD), 'DDMMYY')),  
                     A.EMAOFO,  
                     A.EMAOFA,  
                     A.EMAOFD,  
                     A.EMCOFD,  
                     A.EMUKCD,
                     A.EMRPRT 
                     FROM DTALIBLE.EMASTER A WHERE A.EMPSFT = 'Y' AND A.EMUKCD = ADDRESSCODE AND 
                     DATE(TIMESTAMP_FORMAT(DIGITS(A.EMCRTD), 'DDMMYY')) >= DATE(STARTDATE) AND DATE(TIMESTAMP_FORMAT(DIGITS(A.EMCRTD), 'DDMMYY')) <= DATE(ENDDATE)

但是,当我运行下面的查询时,我没有得到任何结果

SELECT * FROM TABLE(ABELIBLE.TVFBOEGETSHIPMENTS(DATE('06/06/2019'), DATE('06/07/2020'),'MUL0044')) AS XXX

我使用dbeaver在as400上运行查询。
为了我自己的理智,我厌倦了带有文字的select语句,得到了以下结果

然后,当我再次尝试以下日期,它没有取得任何结果,我得到这个错误。

非常感谢您的帮助。先谢谢你。

mnowg1ta

mnowg1ta1#

我唯一想说的是在你的祈祷中,

SELECT * FROM TABLE(ABELIBLE.TVFBOEGETSHIPMENTS(DATE('06/06/2019'), DATE('06/07/2020'),'MUL0044')) AS XXX
``` `'MUL0044'` 因为文本被视为varchar,而udtf的parm被定义为char。
但是,这种不匹配通常会导致函数未找到错误。您可以将文本转换为char或将parm类型更改为varchar。选择哪一个取决于通常如何调用它。如果您只是使用一个文本进行测试,并且函数通常会被传递一个char,那么只需将该文本转换为char。
如果您使用ibmacs的runsqlscripts组件,您将能够调试该函数。

相关问题