Hello All.
I developed a Stored Procedure for generic paging from any table. It is
working fine:
--#SET TERMINATOR !
CREATE PROCEDURE TAB_SEL_ANYPAGE(TNAME CHAR(20),PREDICATE VARCHAR(1000),
N INTEGER,PAGE_NO INTEGER)
LANGUAGE SQL
READS SQL DATA
RESULT SETS 1
S1 : BEGIN
DECLARE SQL_CURS1 CHAR(200) ;
DECLARE STMT_CURS1 CHAR(200) ;
DECLARE CURS2 CURSOR WITH RETURN FOR STMT_CURS1 ;
SET SQL_CURS1 = 'SELECT * FROM '||TNAME ||
'WHERE ' || PREDICATE || ' ' || CHAR(N * (PAGE_NO - 1))
|| CASE WHEN N 0 THEN 'FETCH FIRST '|| CHAR(N) ||' ROWS ONLY'
WHEN N = 0 THEN ' '
ELSE
RAISE_ERROR ('77000', 'INVALID FETCH, VALID N - INTEGER 0')
END ;
PREPARE STMT_CURS1 FROM SQL_CURS1 ;
OPEN CURS2 ;
END S1!
Example of use: Get 2nd page 12 line per screen from table QUERY_LOG based on
the key
invoice#:
CALL TAB_SEL_ANYPAGE('QUERY_LOG','INVOICE#' ,12,2);
INVOICE# CREATE_DATE QUERY_ID
----------- ----------- ----------
13 05/10/2008 ALL01 13
14 05/10/2008 ALL01 14
15 05/10/2008 ALL01 15
16 05/10/2008 ALL01 16
17 05/10/2008 ALL01 17
18 05/10/2008 ALL01 18
19 05/10/2008 ALL01 19
20 05/10/2008 ALL01 20
21 05/10/2008 ALL01 21
22 05/10/2008 ALL01 22
23 05/10/2008 ALL01 23
24 05/10/2008 ALL01 24
12 record(s) selected.
But i a got an error when i try to develop UDF to call this SP:
--#SET TERMINATOR!
CREATE FUNCTION TAB_SEL_ANYPAGE (TNAME CHAR(20),PREDICATE VARCHAR(1000),N
INTEGER,PAGE_NO INTEGER)
RETURNS TABLE (RESULT VARCHAR(1000))
MODIFIES SQL DATA
DETERMINISTIC
NO EXTERNAL ACTION
BEGIN ATOMIC
DECLARE RESULT VARCHAR(1000);
CALL TAB_SEL_ANYPAGE (TNAME CHAR(20),PREDICATE VARCHAR(1000),N INTEGER,
PAGE_NO INTEGER,RESULT);
RETURN VALUES RESULT;
END!
SQL0104N An unexpected token "VALUES" was found following "RETURNS ".
Expected tokens may include: "JOIN <joined_table>
".
Any idea what is wrong?
--
Message posted via DBMonster.com
http://www.dbmonster.com/Uwe/Forums....m-db2/200807/1