0

下面是PetaPoco ORM 为 .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 NULL的子句在语法上不正确。ORDER BY

over (ORDER BY (SELECT NULL))

可以改写

(ORDER BY (SELECT NULL from dual))

或更简单地说

(ORDER BY null)

当然,row_number如果您不按任何方式对结果进行排序,那么获得 a 真的没有意义。没有理由期望返回的行集是一致的——您可以任意获得 20 行的任何集。如果您转到结果的第二页,则没有理由期望结果的第二页与第一页完全不同,或者如果您翻阅整个结果集,任何特定的结果都会出现在任何页面上。

于 2012-09-18T17:26:58.460 回答
0

在 ORDER BY 子句中应该有和 order 定义。例如,假设您的元素按 column 的顺序显示"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

如果这是设置顺序的不同列,只需在 ORDER BY 子句中切换它。实际上应该定义任何顺序,否则不能保证它不会改变,并且您无法确定在任何页面上会显示什么。

于 2012-09-18T17:27:26.533 回答