C# 存储过程informix 7.x上的名称列

C# 存储过程informix 7.x上的名称列,c#,nhibernate,informix,C#,Nhibernate,Informix,我在Informix7.x上有一个存储过程,这个存储过程是使用CreateSQLQuery方法在Nhibernate上调用的 问题是存储过程检索到的所有列都具有相同的名称“expresion”,因此在NHibernate上调用存储过程时,无法将这些列映射到实体 是否可以在存储过程中将别名设置为列?或者可以在NHibernate上重命名colums 储存程序: CREATE PROCEDURE ConFactPag ( paramCia CHAR(2), pa

我在Informix7.x上有一个存储过程,这个存储过程是使用CreateSQLQuery方法在Nhibernate上调用的

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

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

储存程序:

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;    

请注意,Informix动态服务器版本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中有此功能。

您说得对,可以在版本9 o中命名返回的参数,而不是在版本7中,我认为唯一的选项是,在NHibernate中有一些东西可以命名返回的参数,同时获取这些参数请参见西班牙语堆栈溢出。
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;