2013-07-02 30 views
8

chcę zrobić niestandardowego stronicowania według następującego link:Pageing w procedurze strored

ale mój procedura przechowywana jest w Informix:

więc szukam równoważnej row_number() Uważam to solution

ale kiedy go używać w moim postępowaniu i pojawia się następujący błąd

błąd SQL -944 cann't użytkowania "pierwszy", "Granica", "skip" w THI s kontekst!


Jak przepisać procedurę przechowywaną w poprzednim linku z zasadami Informix?

moja procedura ma wiele związków jest tak:

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

Odpowiedz

1

spróbować

; 
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

To nie jest składnia Informix, o co prosił OP. – RET

+1

Notacja @ nie jest Informix; funkcja OLAP jest w Informix 12.10, jak sądzę. –

2

Nie można używać FIRST, SKIP itp, ponieważ każda instrukcja SELECT w kolekcji UNION jest samowystarczalny.

Być może można spróbować tworzenia VIEW która zamyka logikę SELECT ... UNION ... SELECT, a następnie zastosować logikę FIRST/SKIP do tego.

+0

Czy "WYBIERZ SKIP 100 PIERWSZY 100 * Z TABELI (MULTISET (WYBIERZ ... WYBÓR UNII ...)" działa? –