2013-07-02 9 views
8

voglio fare un paging personalizzato in base alla seguente link:Pageing nella procedura strored

ma la mia stored procedure è in Informix:

quindi cerco l'equivalente row_number() Trovo che questo solution

ma quando lo uso nel mio procedimento ottengo il seguente errore

errore SQL -944 cann't uso "prima", "limite", "saltare" in thi s contesto!


Come riscrivere la stored procedure nel link precedente con le regole Informix?

mia procedura ha molteplici sindacati è come questo:

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 ...... 

risposta

1

provare questo

; 
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 
+2

Questa non è la sintassi Informix, che è l'OP richiesta. – RET

+1

La notazione @ non è Informix; la funzionalità OLAP è in Informix 12.10, credo. –

2

non è possibile utilizzare FIRST, SKIP ecc, perché ogni SELECT dichiarazione all'interno della collezione UNION è a sé stante.

Forse si potrebbe provare a creare un VIEW che incapsula la logica SELECT ... UNION ... SELECT, e quindi applicare la logica FIRST/SKIP a quello.

+0

Sarebbe 'SELECT SKIP 100 FIRST 100 * FROM TABLE (MULTISET (SELECT ... UNION SELECT ...)' funziona? –