Vinit ...
Vinit ...

Reputation: 1459

how to use limit keyword in oracle

I am retrieving data from table but instead of all row, I want 20 rows at a time for pagination. For this I use limit keyword which work perfectly in Mysql but not in Oracle.

Code:

"select "+  "C.CONTRACTOR_ID,C.CONTRACTOR_NAME,nvl(C.CONTACT_PERSON_1,'-'),nvl(C.CONTACT_PERSON_2,'-'),C.REGISTRATION_NO,CRA.DESCRIPTION REG_AUTH_NAME,"+
            "to_char(C.VALID_FROM,'dd/mm/yyyy'),to_char(C.VALID_TO,'dd/mm/yyyy'),CC.DESCRIPTION CONTRACTOR_CLASS,C.INCORP_PLACE,"+
            "IT.DESCRIPTION INCORP_TYPE,nvl(to_char(C.DATE_OF_INCORP,'dd/mm/yyyy'),'-') DATE_OF_INCORP,C.ADDRESS1,nvl(C.ADDRESS2,'-'),nvl(C.EMAIL_ID,'-'),"+
            "nvl(C.WEBSITE_URL,'-'),nvl(C.PHONE_NO,'-'),nvl(C.FAX_NO,'-'),nvl(C.MOBILE_NO,'-'),C.BANK_NAME,C.BANK_BRANCH,C.ACCOUNT_NO,C.IFSC_CODE," +
            "C.PAN_NO,nvl(C.TIN_NO,'-'),nvl(C.CST_NO,'-') "+ 
"from "+
            "CONTRACTOR C "+  
            "inner join CONTRACTOR_REG_AUTH CRA on CRA.REG_AUTH_ID=C.REG_AUTH_ID "+
            "inner join CONTRACTOR_CLASS CC on CC.CLASS_ID=C.CONTRACTOR_CLASS_ID "+
            "inner join INCORPORATION_TYPE IT on IT.INCORP_TYPE=C.INCORP_TYPE "+
"limit " + offset + ", " + noOfRecords ";

Here no order by keyword is there. I am retrieving data from different table and then display only 20 rows at a time.

Upvotes: 2

Views: 1166

Answers (1)

Andomar
Andomar

Reputation: 238078

In Oracle, you can use the special rownum variable. This example behaves like limit FirstRow, NrOfRows:

select  * 
from    ( 
        select  *
        ,       rownum as rn 
        from    YourTable
        order by
                id
        ) as SubQueryAlias
where   FirstRow <= rn 
        and rn < FirstRow + NrOfRows

An optimized version of this query from AskTom, linked from this SO question:

select  * 
from    ( 
        select  /*+ FIRST_ROWS(n) */ 
                rownum as rn
        ,       *
        from    (
                select  *
                from    YourTable
                order by 
                        id
                ) as SubQueryAlias1
        where   rownum <= FirstRow + NrOfRows
        ) as SubQueryAlias2
where   rn >= FirstRow

Upvotes: 6

Related Questions