【问题标题】:Paging in the stored procedure存储过程中的分页
【发布时间】:2013-06-29 16:48:12
【问题描述】:

我想根据以下link进行自定义分页:

但我的存储过程在informix中:

所以我搜索等效的row_number() 我找到了这个solution

但是当我在我的程序中使用它时,我收到以下错误:

SQL 错误 -944 Cann't use "first","limit","skip" 在这种情况下!


如何用informix规则重写上一个链接中的存储过程?

我的程序有多个联合是这样的:

create procedure get_inbox_page(p_emp_num smallint, p_task_code smallint, p_main_code smallint default 0, p_year smallint default 0,p_page int)
returning varchar(60) as v_page_view, varchar(60) as v_task_name, smallint as v_task_code, varchar(60) as v_sp_name, varchar(60) as v_db_name, varchar(60) as v_column_key,  smallint as v_trans_serial, 
    DATETIME YEAR TO FRACTION(3) as v_trans_date, varchar(60) as v_trans_desc , varchar(60) as v_emp_name, varchar(60) as v_values_key, smallint as v_old_state_serial, 
    smallint as v_new_state_serial, smallint as v_main_code, smallint as v_year, varchar(60) as v_page_new, smallint as v_task_type, smallint as v_task_status,smallint as v_mail_maincode,smallint as v_mail_year,smallint as v_mail_number,smallint as v_trans_year , smallint as candidate_flag ;

Select  ......

UNION 

Select ......

UNION 

Select ......

【问题讨论】:

    标签: sql asp.net linq informix


    【解决方案1】:

    您不能使用FIRSTSKIP 等,因为UNION 集合中的每个SELECT 语句都是独立的。

    也许您可以尝试创建一个封装SELECT ... UNION ... SELECT 逻辑的VIEW,然后对其应用FIRST/SKIP 逻辑。

    【讨论】:

    • SELECT SKIP 100 FIRST 100 * FROM TABLE(MULTISET(SELECT ... UNION SELECT...) 工作吗?
    【解决方案2】:

    试试这个

    ;
    WITH    tempPagedRecord
              AS ( SELECT   Column1 ,
                            Column2 ,
                            Column3
                   FROM     TableName AS e--Your query with union 
                   UNION ALL
                   SELECT   Column1 ,
                            Column2 ,
                            Column3
                   FROM     TableName AS e--Your query with union
                 )
        SELECT  * ,
                ROW_NUMBER() OVER ( ORDER BY Column1 ASC ) AS RowNumber--RowNumber over some column
        FROM    tempPagedRecord 
     WHERE RowNumber BETWEEN(@PageIndex -1) * @PageSize + 1 AND(((@PageIndex -1) * @PageSize + 1) + @PageSize) - 1
    

    【讨论】:

    • 这不是 Informix 语法,这是 OP 要求的。
    • @ 表示法不是 Informix; OLAP 功能在 Informix 12.10 中,我相信。
    猜你喜欢
    • 1970-01-01
    • 2020-09-03
    • 2014-08-17
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    • 2013-01-07
    • 2016-03-25
    相关资源
    最近更新 更多