存储过程notifyix 7.x上的名称列

时间:2018-08-15 15:12:18

标签: c# nhibernate informix

我在notifyix 7.x上有一个存储过程,该存储过程在Nhibernate上使用CreateSQLQuery方法调用。

问题是存储过程检索的所有列都具有相同的名称“ expresion”,因此在NHibernate上调用存储过程时,不可能将这些列映射到实体。

是否可以在存储过程中为列设置别名?还是可以在NHibernate上重命名列?

存储过程:

CREATE PROCEDURE ConFactPag
(
    paramCia            CHAR(2),
    paramPla            CHAR(2),    
    paramFechaInicial   DATE,
    paramFechaFinal     DATE    
)

RETURNING 
INT, 
CHAR(4), 
CHAR(10), 
CHAR(100),
CHAR(15), 
CHAR(15),
CHAR(100);

DEFINE v_folio      INT;
DEFINE v_serie      CHAR(4);
DEFINE v_fecha      CHAR(10);
DEFINE v_cliente    CHAR(110);
DEFINE v_importe    CHAR(15);
DEFINE v_saldo      CHAR(15);
DEFINE v_pago       CHAR(110);


FOREACH cFacturas FOR
    SELECT  f.fol_fac as v_folio, 
            f.ser_fac as v_serie, 
            TO_CHAR(f.fec_fac,'%d-%m-%Y'),
            CASE 
            WHEN TRIM(c.razsoc_cte) <> '' THEN
            TRIM(c.razsoc_cte) 
            ELSE 
            CASE    
            WHEN c.ali_cte <> '' THEN
                 TRIM(C.ali_cte) || ', ' 
              ELSE
                 '' 
           END || trim(c.nom_cte) || ' ' || TRIM(c.ape_cte) 
        END AS ncom_cte,
        LPAD(f.impt_fac,6,'0')
INTO    v_folio,
        v_serie,
        v_fecha,
        v_cliente,
        v_importe
FROM    factura f,
        cliente c
WHERE   f.numcte_fac = c.num_cte
        and f.tpa_fac = 'C'
        and f.cia_fac = paramCia
        and f.pla_fac = paramPla
        and f.fec_fac >= paramFechaInicial  
        and f.fec_fac <= paramFechaFinal
        --and f.fol_fac = 534896    

SELECT  SUM(sal_doc)
INTO    v_saldo
FROM    doctos
WHERE   ffac_doc = v_folio and sfac_doc = v_serie and tip_doc = '01';
LET v_pago = '';
IF v_saldo = 0 THEN
    SELECT  ser_pfac || ' ' || fol_pfac || ' ' || fec_pfac || ' ' || 
    imp_pfac
    INTO    v_pago
    FROM    pago_fac
    WHERE   ffac_pfac = v_folio and sfac_pfac = v_serie and numpag_pfac = 1;
END IF;

RETURN  v_folio,
        v_serie,
        v_fecha,
        v_cliente,
        v_importe,  
        LPAD(v_saldo,6,'0'),
        v_pago          
WITH RESUME;
END FOREACH;  
END PROCEDURE;    

C#:

var listBills = this.facturaRepository.Session.CreateSQLQuery("EXECUTE PROCEDURE ConFactPag('15','02','2018-06-07','2018-06-07');").List();

1 个答案:

答案 0 :(得分:1)

请注意,Informix Dynamic Server版本7已不再受支持,您应该考虑升级到受支持的版本。当前版本是11.70和12.10。

在更高版本的IDS中,可以对RETURNING子句中的每个值使用“ AS”语法为存储过程或函数的返回参数命名。使用上面的示例,可以将其写为:

RETURNING 
INT AS folio, 
CHAR(4) AS serie, 
CHAR(10) AS fecha, 
CHAR(100) AS cliente,
CHAR(15) AS importe, 
CHAR(15) AS saldo,
CHAR(100) AS pago;

但是我不认为IDS版本7中提供此功能。