代码之家  ›  专栏  ›  技术社区  ›  pxr_64

Informix函数无理由返回

  •  0
  • pxr_64  · 技术社区  · 7 年前

    我有以下informix过程

    CREATE FUNCTION selectSollmandant(INOUT sollmandat SOLLMANDAT_ROW, inkassodatum INT8) RETURNING SMALLINT
    DEFINE ret SMALLINT;
    LET ret = 0;
    trace "Entering select sollmandat " || sollmandat.vers_schein_nr;
    
    PREPARE sollStmt FROM "SELECT s::SOLLMANDAT_ROW FROM  sollmandat s WHERE vers_schein_nr = ? ORDER BY lfdnr desc";
    
    DECLARE _sollmCsr CURSOR FOR sollStmt;
    IF SQLCODE != 0 THEN
        CALL print_to_proto("DECLARE letztZahlCsr " || SQLCODE);
        RETURN 0;
    END IF;
    
    TRACE "log ===========  1";
    OPEN _sollmCsr USING sollmandat.vers_schein_nr;
    TRACE "log ===========  2" || SQLCODE;
    
    IF SQLCODE != 0 THEN
        TRACE "log ===========  3" || SQLCODE;  
        CALL print_to_proto("OPEN sollmandat " || SQLCODE);
        RETURN 0;
    END IF;
    TRACE "sollmandant iban is ===========  4" || SQLCODE;  
    WHILE (1=1) LOOP .... end loop and return...
    

    你能帮帮我吗?我不知道我错过了什么。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Community kfsone    4 年前

    澄清

    好的,那么 SOLLMANDAT_ROW 是一个 ROW_TYPE 我定义的(想想它) struct sollmadant 表并将行存储在自定义 SOLLMANDAT_行 .

    为了能够将选定的行存储在ROW_类型中,必须将该行显式转换为该特定的行类型,因此需要语法 SELECT s::SOLLMANDAT_ROW FROM... .

    同义词 ,我的代码在 OPEN cursor 陈述 为了通过该问题,我所做的是如下引用我的行数据:

    SELECT ROW([row colums gere ])::SOLLMANDAT_ROW [rest of select statement]
    

    我真的不知道为什么informix在尝试将同义词表中的行存储到特定的自定义行类型时不“喜欢”我的第一个select的语法。如果有人能提供解释,我将不胜感激。