Data is not displayed for some ID from the procedure in oracle
You can simplify your procedure a lot by:
- testing if the
jobid
is a substring of thep_jobid
parameter; and - using
OFFSET m ROWS FETCH NEXT n ROWS ONLY
syntax.
create or replace PROCEDURE CHANGEREQUESTS_CREATED_GETLIST( P_USERNAME IN CHANGEREQUESTS.CREATEDBY%type, P_JOBID IN CLOB--VARCHAR2, P_PAGENO IN NUMBER, P_PAGESIZE IN NUMBER, TOTALCOUNT OUT NUMBER, OUTPUTTABLE OUT SYS_REFCURSOR)AS v_size NUMBER := COALESCE( p_pagesize, 10 ); v_start NUMBER := COALESCE( p_pageno - 1, 0 ) * v_size;BEGIN SELECT COUNT(*) INTO TOTALCOUNT FROM CHANGEREQUESTS CR WHERE ',' || p_jobid || ',' LIKE '%,' || jobid || ',%' AND CREATEDBY = P_USERNAME AND JOBID > 0; OPEN OUTPUTTABLE FOR SELECT CR.CHANGEREQUESTID ,CT.CHANGETYPE ,CR.JOBID FROM CHANGEREQUESTS CR INNER JOIN CHANGETYPES CT ON ( CR.CHANGETYPEID = CT.CHANGETYPEID ) INNER JOIN CHANGECATEGORIES CC ON ( CC.CHANGECATEGORYID = CT.CHANGECATEGORYID ) WHERE ',' || p_jobid || ',' LIKE '%,' || jobid || ',%' AND CREATEDBY = P_USERNAME AND JOBID > 0 ORDER BY CR.CHANGEREQUESTID DESC OFFSET v_start ROWS FETCH NEXT v_size ROWS ONLY;END CHANGEREQUESTS_CREATED_GETLIST;/
Which, for the sample data:
CREATE TABLE CHANGEREQUESTS ( CHANGEREQUESTID, CHANGETYPEID, JOBID, CREATEDBY ) AS SELECT 7835, 4, 42234, 'user1' FROM DUAL UNION ALLSELECT 7834, 22, 42233, 'user1' FROM DUAL UNION ALLSELECT 7833, 8, 42242, 'user1' FROM DUAL UNION ALLSELECT LEVEL, DECODE( MOD( LEVEL, 3), 0, 4, 1, 22, 8 ), 99999, 'user1'FROM DUALCONNECT BY LEVEL <= 40;CREATE TABLE CHANGETYPES (CHANGETYPEID, CHANGETYPE, CHANGECATEGORYID, ISACTIVE) ASSELECT 4, 'Random Type', 1, 1 FROM DUAL UNION ALLSELECT 8, 'Change in media type (OFC/MW)', 1, 1 FROM DUAL UNION ALLSELECT 22, 'RF site deletion', 1, 1 FROM DUAL;CREATE TABLE CHANGECATEGORIES ( CHANGECATEGORYID, CATEGORY, ISACTIVE ) ASSELECT 3, 'OSP Engineering', 1 FROM DUAL UNION ALLSELECT 2, 'Wireline', 1 FROM DUAL UNION ALLSELECT 1, 'Wireless', 1 FROM DUAL;
Then:
DECLARE v_pgsz NUMBER := 20;BEGIN FOR v_pgno IN 1 .. 3 LOOP DECLARE v_cur SYS_REFCURSOR; v_size NUMBER; v_crid CHANGEREQUESTS.CHANGEREQUESTID%TYPE; v_ctyp CHANGETYPES.CHANGETYPE%TYPE; v_jid CHANGEREQUESTS.JOBID%TYPE; BEGIN CHANGEREQUESTS_CREATED_GETLIST( 'user1', '42234,99999', v_pgno, v_pgsz, v_size, v_cur ); DBMS_OUTPUT.PUT_LINE( 'Page:' || v_pgno || ' (Total: ' || v_size || ' rows)' ); LOOP FETCH v_cur INTO v_crid, v_ctyp, v_jid; EXIT WHEN v_cur%NOTFOUND; DBMS_OUTPUT.PUT_LINE( LPAD( v_crid, 4, ' ' ) || ' | ' || RPAD( v_ctyp, 30, ' ' ) || ' | ' || LPAD( v_jid, 4, ' ' ) ); END LOOP; CLOSE v_cur; END; END LOOP;END;/
Outputs:
Page:1 (Total: 41 rows)7835 | Random Type | 4223 40 | RF site deletion | 9999 39 | Random Type | 9999 38 | Change in media type (OFC/MW) | 9999 37 | RF site deletion | 9999 36 | Random Type | 9999 35 | Change in media type (OFC/MW) | 9999 34 | RF site deletion | 9999 33 | Random Type | 9999 32 | Change in media type (OFC/MW) | 9999 31 | RF site deletion | 9999 30 | Random Type | 9999 29 | Change in media type (OFC/MW) | 9999 28 | RF site deletion | 9999 27 | Random Type | 9999 26 | Change in media type (OFC/MW) | 9999 25 | RF site deletion | 9999 24 | Random Type | 9999 23 | Change in media type (OFC/MW) | 9999 22 | RF site deletion | 9999Page:2 (Total: 41 rows) 21 | Random Type | 9999 20 | Change in media type (OFC/MW) | 9999 19 | RF site deletion | 9999 18 | Random Type | 9999 17 | Change in media type (OFC/MW) | 9999 16 | RF site deletion | 9999 15 | Random Type | 9999 14 | Change in media type (OFC/MW) | 9999 13 | RF site deletion | 9999 12 | Random Type | 9999 11 | Change in media type (OFC/MW) | 9999 10 | RF site deletion | 9999 9 | Random Type | 9999 8 | Change in media type (OFC/MW) | 9999 7 | RF site deletion | 9999 6 | Random Type | 9999 5 | Change in media type (OFC/MW) | 9999 4 | RF site deletion | 9999 3 | Random Type | 9999 2 | Change in media type (OFC/MW) | 9999Page:3 (Total: 41 rows) 1 | RF site deletion | 9999
db<>fiddle here