0

以下は、PetaPoco ORMfor.NETによって生成されたクエリです。現在、デバッグ用のOracleクライアントがなく、明らかに問題があることはわかりません(ただし、私はSQL Serverの担当者です)。なぜこのエラーが発生するのか誰かに教えてもらえますか?

Oracle.DataAccess.Client.OracleException ORA-00923:FROMキーワードが予期された場所に見つかりません

SELECT * 
FROM (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) peta_rn, 
"ON_CUST_MAS"."CU_NO", 
"ON_CUST_MAS"."CU_NAME", 
"ON_CUST_MAS"."CU_TYPE", 
"ON_CUST_MAS"."CONTACT", 
"ON_CUST_MAS"."ADD1_SH", 
"ON_CUST_MAS"."ADD2_SH", 
"ON_CUST_MAS"."CITY_SH", 
"ON_CUST_MAS"."POST_CODE", 
"ON_CUST_MAS"."PROV_SH", 
"ON_CUST_MAS"."COUNTRY", 
"ON_CUST_MAS"."PHONE_NU", 
"ON_CUST_MAS"."FAX_NU", 
"ON_CUST_MAS"."EMAIL", 
"ON_CUST_MAS"."PU_ORDER_FL", 
"ON_CUST_MAS"."CREDIT_AMOUNT" 
FROM "ON_CUST_MAS" ) peta_paged 
WHERE peta_rn>0 AND peta_rn<=20

編集:念のため、これはページングクエリです。通常のクエリ(すべて選択、IDで選択)は正常に機能しています。

4

2 に答える 2

4

問題は、分析関数のSELECT NULLin句が構文的に正しくないことです。ORDER BY

over (ORDER BY (SELECT NULL))

書き直すことができます

(ORDER BY (SELECT NULL from dual))

またはもっと簡単に

(ORDER BY null)

もちろん、row_number結果を何も注文していない場合は、を取得することは実際には意味がありません。返される行のセットに一貫性があると期待する理由はありません。20行の任意のセットを任意に取得できます。また、結果の2ページ目に移動した場合、結果の2ページ目が最初のページと完全に異なることや、結果セット全体をページングした場合に特定の結果が任意のページに表示されることを期待する理由はありません。

于 2012-09-18T17:26:58.460 に答える
0

ORDERBY句内に順序が定義されている必要があります。たとえば、"on_cust_mas"."cu_no"クエリが次のようになるよりも、要素が列の順序で表示されているとします。

SELECT *
FROM   (SELECT Row_number()
                 over (
                   ORDER BY ("on_cust_mas"."cu_no")) peta_rn,
               "on_cust_mas"."cu_no",
               "on_cust_mas"."cu_name",
               "on_cust_mas"."cu_type",
               "on_cust_mas"."contact",
               "on_cust_mas"."add1_sh",
               "on_cust_mas"."add2_sh",
               "on_cust_mas"."city_sh",
               "on_cust_mas"."post_code",
               "on_cust_mas"."prov_sh",
               "on_cust_mas"."country",
               "on_cust_mas"."phone_nu",
               "on_cust_mas"."fax_nu",
               "on_cust_mas"."email",
               "on_cust_mas"."pu_order_fl",
               "on_cust_mas"."credit_amount"
        FROM   "on_cust_mas") peta_paged
WHERE  peta_rn > 0
       AND peta_rn <= 20

これが順序を設定する別の列である場合は、ORDERBY句内で切り替えるだけです。実際には、順序を定義する必要があります。そうしないと、順序が変更されないことが保証されず、どのページに何が表示されるかを確認できません。

于 2012-09-18T17:27:26.533 に答える