如何从ef core调用db2表值函数

nhjlsmyf  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(490)

我正在使用asp.net core 3.1和ef core以及DB2AS400数据库。我创建了一个表值函数,如下所示

CREATE FUNCTION ABELIBLE.TVFBOEGETSHIPMENTS ( 
    STARTDATE DATE , 
    ENDDATE DATE , 
    ADDRESSCODE CHAR(9) ) 
    RETURNS TABLE ( 
    "ID" INTEGER , 
    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 
    SPECIFIC ABELIBLE.TVFBOEGETSHIPMENTS 
    NOT DETERMINISTIC 
    READS SQL DATA 
    CALLED ON NULL INPUT 
    SET OPTION  ALWBLK = *ALLREAD , 
    ALWCPYDTA = *OPTIMIZE , 
    COMMIT = *NONE , 
    DECRESULT = (31, 31, 00) , 
    DYNDFTCOL = *NO , 
    DYNUSRPRF = *USER , 
    SRTSEQ = *HEX   
    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 )  ;

我可以使用以下语句在dbeaver中获得此函数的结果

SELECT * FROM TABLE(ABELIBLE.TVFBOEGETSHIPMENTS('2020-05-27', '2020-05-27','MUL0044'))

但是我无法从ef core调用函数。我打电话的代码是这样的:

这是我得到的错误:

非常感谢您的帮助。

u5i3ibmn

u5i3ibmn1#

请不要使用包含纯文本的图像。原因是图像内容不可搜索,图像很难引用。
相反,只需将代码或错误消息的纯文本复制到问题中。
第一个图像显示代码中的查询(语法不正确)与给定给dbeaver的查询(语法正确)不同。先解决这个问题。
db2服务器通过抛出sql0104n来拒绝不正确的语法。您可以在db2-for-i知识中心中查找这些代码。如果你花时间研究它们,这些解释通常会有帮助。

hts6caw3

hts6caw32#

下面的工作与语句的格式有关。

string sql = "SELECT * FROM TABLE ( ABELIBLE.TVFBOEGETSHIPMENTS ( '2020-05-27', '2020-05-27','MUL0044' ) )";
            var Shipments = _appDbContext.Shipments.FromSql(sql);
            return Shipments;

相关问题