【问题标题】:JPA eclipselink oracle db error: not a selected expressionJPA eclipselink oracle db错误:不是选定的表达式
【发布时间】:2017-05-16 16:13:52
【问题描述】:
Order                 OrderItem                                     Product
-----------------------------------------------------------------------------
id                    id,orderId,proudctId,unitPrice,quantity       id, barcode

JPA eclipseLink:按 orderId、产品条形码和数量列出订单项目:

select * from OrderItem order by orderId asc, 
lpad(product.barcode, 20, '0') desc, quantity asc

Query: ReadAllQuery(referenceClass=OrderItem sql="SELECT * FROM (SELECT a.*,
ROWNUM rnum  FROM (SELECT DISTINCT t1.ID AS a1, t1.QUANTITY AS a2, 
t1.UNITPRICE AS a3, t1.orderId AS a4, t1.productId AS a5, lpad(t0.barcode, ?, ?)
FROM Product t0, OrderItem t1 WHERE (t0.ID = t1.productId) ORDER BY t1.orderId 
ASC, lpad(t0.barcode, ?, ?) DESC, t1.QUANTITY ASC) a WHERE ROWNUM <= ?) WHERE 
rnum > ?")

错误 ORA-01791:不是 SELECTed 表达式

如果在oracle sqlPlus 中执行SQL,没有错误。如果只是通过 product.barcode 而不是 lpad(...) 订购,它可以工作。

【问题讨论】:

    标签: oracle jpa eclipselink


    【解决方案1】:

    假设您想按相同的表达式lpad(p.barcode, ?, ?) 进行排序,请改用其别名。试试这个:

    select *
    from (
        select a.*,
            ROWNUM rnum
        from (
            select distinct o.ID as a1,
                o.QUANTITY as a2,
                o.UNITPRICE as a3,
                o.orderId as a4,
                o.productId as a5,
                lpad(p.barcode, ?, ?) as a6
            from Product p
            join OrderItem o on p.ID = o.productId
            order by a4,
                a6 desc,
                a2
            ) a
        where ROWNUM <= ?
        )
    where rnum > ?
    

    还要注意 explicit 连接语法,它比旧的基于逗号的连接语法和重命名的表别名更现代、更清晰。

    【讨论】:

      猜你喜欢
      • 2012-12-11
      • 2016-02-24
      • 2016-01-07
      • 1970-01-01
      • 2021-03-13
      • 1970-01-01
      • 2017-09-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多