如何为db2表值函数传递日期参数

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

我是db2的新手,真的希望你们中的一个能帮助我。我无法创建参数类型为date的表值函数。
我尝试了以下操作,得到以下异常:

表值函数仅使用addresscode就可以正常工作。
我使用dbeaver在as400上执行脚本。
代码:

ALTER 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')) >= STARTDATE AND DATE(TIMESTAMP_FORMAT(DIGITS(A.EMCRTD), 'DDMMYY')) <= ENDDATE
pgpifvop

pgpifvop1#

我假设您正在使用db2 for i,因为关键字ccsid显示在错误弹出窗口中
造成问题的不是图像中突出显示的日期关键字,而是参数中的日期关键字
你写的

ALTER FUNCTION ABELIBLE.TVFBOEGETSHIPMENTS (STARTDATE DATE, ENDDATE DATE, ADDRESSCODE CHAR(9))
RETURNS TABLE

你必须写作

ALTER FUNCTION ABELIBLE.TVFBOEGETSHIPMENTS
/* parameter type without name that indicate the signature */
(DATE, DATE, CHAR(9)) 

REPLACE RESTRICT
/*redefine parameters */
(STARTDATE DATE, ENDDATE DATE, ADDRESSCODE CHAR(9)) 
RETURNS TABLE ...

相关问题