2013-07-02 5 views
8

Ich möchte eine benutzerdefinierte Paging machen nach dem folgenden link:Pageing im strored Verfahren

aber meine gespeicherten Prozedur ist in Informix:

so suche ich nach dem äquivalenten row_number() finde ich solution

, aber wenn ich es in meinem Verfahren verwenden, bekomme ich folgende Fehler

SQL-Fehler -944 Cann't verwenden "erste", "Limit", "überspringen" in thi s Kontext!


Wie die gespeicherte Prozedur in der vorherige Verbindung mit Informix Regeln neu zu schreiben?

mein Verfahren mehrere Gewerkschaften hat, ist wie folgt:

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

Antwort

1

versuchen diese

; 
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

Dies ist keine Informix-Syntax, die das OP angefordert hat. – RET

+1

Die @ Notation ist nicht Informix; die OLAP-Funktionalität ist in Informix 12.10, glaube ich. –

2

Sie nicht FIRST, SKIP etc, da jede SELECT Anweisung innerhalb der UNION Sammlung in sich geschlossen ist verwenden können.

Vielleicht könnten Sie versuchen, eine VIEW erstellen, die die SELECT ... UNION ... SELECT Logik kapselt und dann auf die zu, dass FIRST/SKIP Logik anwenden.

+0

Würde 'SKIP 100 ERSTE 100 * AUS TABELLE AUSWÄHLEN (MULTISET (SELECT ... UNION SELECT ...)' Arbeit? –