Di seguito un esempio di come introdurre la paginazione all'interno di un REST, questo può essere utile se il numero di record è elevato e si vuole restituire un risultato il prima possibile in modo da fare vedere prima i primi 1000 record e così via.
Supponiamo di richiamare un pl-sql nel nostro handler:
Vediamo prima la struttura del pl-sql e poi dell'handler. Di seguito la struttura della procedura pl-sql richiamata in un package.
PROCEDURE getElement (
user_id in varchar2,
element_type_cd in varchar2 default null,
---- Parametri impaginazione
page in number default 1,
numrows in number default 1000,
---- Fine Parametri impaginazione
OUT_COUNT OUT NUMBER,
OUT_ELEMENT_TYPES OUT SYS_REFCURSOR)
AS
--- <dichiarazioni di variabili >
...
---------------------------------------------
---- calcolo paginazione
---------------------------------------------
l_page number := (page * numrows) - numrows;
l_rows number := numrows;
BEGIN
------------------------------
--- count
--------------------------------------------------------
SELECT COUNT(1) INTO out_count
FROM ....
IF OUT_COUNT = 0 THEN
RAISE NO_DATA_FOUND;
END IF;
------------------------------
--- sys_refcursor
------------------------------
OPEN OUT_ELEMENT_TYPES FOR
WITH
js AS (SELECT ... )
)
SELECT js.*, jt.*
FROM js , jt
offset l_page rows fetch next l_rows rows only;
END getElement;
A questo punto vediamo la definizione della get:
BEGIN
GETELEMENT(
USER_ID => :USER_ID,
ELEMENT_TYPE_CD => :ELEMENT_TYPE_CD,
PAGE => nvl(:pag,1),
NUMROWS => nvl(:numrows,1000),
OUT_COUNT => :OUT_COUNT,
OUT_ELEMENT_TYPES => :OUT_ELEMENT_TYPES
);
END;
A questo punto occorre definire le variabili di input ed output del REST.
A questo punto basta effettuare una chiamata REST con SOAP_UI o POSTMAN fornendo in input le varibile difinite dal package, se PAGE o NUMROWS non saranno valorizzate in automatico passiamo 1 e 1000, per andare avanti nella paginazione effettuare una seconda chiamata e passare un nuovo numero di pagina o di righe da ritornare.
Finito.
Nessun commento:
Posta un commento