2

テーブルからデータを取得していますが、すべての行ではなく、ページネーションのために一度に 20 行が必要です。このために、 Mysql では完全に機能しますがOracleでは機能しない limit キーワードを使用します。

コード:

"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 ";

ここでは、キーワードによる順序はありません。別のテーブルからデータを取得し、一度に 20 行しか表示しません。

4

1 に答える 1

6

rownumOracleでは、特殊変数を使用できます。この例は次のように動作しlimit FirstRow, NrOfRowsます:

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

このSOの質問からリンクされた、 AskTomからのこのクエリの最適化されたバージョン:

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
于 2012-07-27T06:16:53.267 に答える