ORA-01791:不是SELECTed表达式PL SQL

时间:2015-10-25 11:22:54

标签: sql oracle plsql

我有下一个查询 - o_ski_packages是一个对象

SELECT DISTINCT p.resortsn
BULK   COLLECT INTO v_resortsn_tbl
FROM   TABLE (o_ski_packages) p;
ORDER BY p.resort_country_name ASC;

我想要的结果就是这个 -

resortsn  resort_country_name  
1              AD
2              BU

我需要与众不同,因为我可以拥有相同数量的记录 -

1              AD,
1              AD

感谢。

2 个答案:

答案 0 :(得分:1)

使用.button时,distinct需要引用order by中的表达式。否则,Oracle将如何知道要选择哪些值?

一种简单的方法是使用select代替group by

distinct

这解决了原始查询的问题,但它只返回一列。看起来你想要这样的东西:

SELECT p.resortsn
BULK COLLECT INTO v_resortsn_tbl
FROM TABLE (o_ski_packages) p
GROUP BY p.resortsn
ORDER BY MAX(p.resort_country_name) ASC;

答案 1 :(得分:0)

根据我的假设,这应该可以正常工作,假设您上面提到的查询可以自行运行。

SELECT DISTINCT p.resortsn, max(resort_country_name) cn
BULK   COLLECT INTO v_resortsn_tbl
FROM   TABLE (O_SKI_PACKAGES) P
group by  p.resortsn
ORDER BY cn ASC;

即使你的resort_country_name resortsn distinct相同,但数据库永远不会知道。因此,将resort_country_name放入任何不需要像MAX这样的群组的聚合函数中。您还需要按resortsn进行分组,如果您只选择resortsn,则可能没有必要进行分组,但是当您使用多个不同的聚合函数时,您需要至少分组1.因此{{1} }