Pages

Tuesday, September 20, 2011

Searching, sorting and paging in Oracle Store Procedure

create or replace PROCEDURE UP_GETSITEOWNERINFO
(
p_inStartRowIndex in number, p_inEndRowIndex in number,
p_vchSiteCode in VARCHAR2 :=null,
p_vchOwnerName in VARCHAR2 :=null,
p_vchCnic in VARCHAR2 :=null,
p_inSortExp in varchar2, p_outTotalRows out number,
p_cursor OUT sys_refcursor
)
AS
BEGIN
select count(*) into p_outTotalRows from SITE
           inner join SITE_OWNERS  on SITE_OWNERS.vchsitecode= SITE.VCHSITECODE
          inner join OWNER  on OWNER.INTOWNERID= Site_Owners.intownerid
where (p_vchSiteCode is null or SITE.vchsitecode like p_vchSiteCode)
and (p_vchcnic is null or vchcnic like p_vchcnic)
and (p_vchownername is null or
      vchfirstname like p_vchownername);


   open p_cursor for select * from
        (select SITE.vchsitecode,SITE.vchcity,SITE.vchdistrict,SITE.dtmdatecreated
        , OWNER.vchfirstname as OwnerName
        , OWNER.vchcnic
        , ROW_NUMBER()
        OVER
        (ORDER BY
          Decode(p_inSortExp,'VCHSITECODED Ascending',SITE.vchsitecode) ASC,
          Decode(p_inSortExp,'VCHSITECODE Descending',SITE.vchsitecode) DESC,
          Decode(p_inSortExp,'OWNERNAME Ascending',OWNER.vchfirstname) ASC,
          Decode(p_inSortExp,'OWNERNAME Descending',OWNER.vchfirstname) DESC,
          Decode(p_inSortExp,'VCHCNIC Ascending',OWNER.vchcnic) ASC,
          Decode(p_inSortExp,'VCHCNIC Descending',OWNER.vchcnic) DESC,
           SITE.vchsitecode)
           R from SITE
           inner join SITE_OWNERS  on SITE_OWNERS.vchsitecode= SITE.VCHSITECODE
          inner join OWNER  on OWNER.INTOWNERID= Site_Owners.intownerid
where (p_vchSiteCode is null or SITE.vchsitecode like p_vchSiteCode)
and (p_vchcnic is null or vchcnic like p_vchcnic)
and (p_vchownername is null or
      vchfirstname like p_vchownername)
        )
WHERE R BETWEEN ((p_inStartRowIndex - 1) * p_inEndRowIndex + 1) and (p_inStartRowIndex * p_inEndRowIndex) ;
END UP_GETSITEOWNERINFO;