SQL - 排序不适用于LENGTH函数

时间:2014-12-05 12:45:26

标签: sql oracle select oracle-apex

我试图根据V.SITES_CODE来解析我的查询。它在没有LENGTH函数的情况下工作,但是对于函数,顺序是完全随机的。有人可以帮忙吗代码:

SELECT     V.CODE_OF_HOLIDAY, V.SITES_CODE, A.SITES_NAME, D.DESCRIPTION
FROM       ZZZ_SITES_VISITED V, ZZZ_SITES_AVAILABLE A, ZZZ_HOLIDAY_DETAILS H, ZZZ_DIFFICULTY_RATINGS D
WHERE      V.CODE_OF_HOLIDAY = H.CODE_OF_HOLIDAY
AND        A.SITES_CODE = V.SITES_CODE(+)
AND        H.DIFFICULTY_RATING = D.HOLIDAY_DIFICULTY
AND        H.CODE_OF_HOLIDAY = V.CODE_OF_HOLIDAY
AND        LENGTH(D.DESCRIPTION) > 6;

2 个答案:

答案 0 :(得分:2)

除非您明确指定order by子句,否则绝对不能保证返回的行的顺序。当你省略length条件时,按照预期的顺序得到它们的事实是完全巧合的,如果将表移动到不同的存储或重建索引,可能会破坏。

如果您希望按V.SITES_CODE排序结果,则应明确说明:

SELECT     V.CODE_OF_HOLIDAY, V.SITES_CODE, A.SITES_NAME, D.DESCRIPTION
FROM       ZZZ_SITES_VISITED V, ZZZ_SITES_AVAILABLE A, ZZZ_HOLIDAY_DETAILS H, ZZZ_DIFFICULTY_RATINGS D
WHERE      V.CODE_OF_HOLIDAY = H.CODE_OF_HOLIDAY
AND        A.SITES_CODE = V.SITES_CODE(+)
AND        H.DIFFICULTY_RATING = D.HOLIDAY_DIFICULTY
AND        H.CODE_OF_HOLIDAY = V.CODE_OF_HOLIDAY
AND        LENGTH(D.DESCRIPTION) > 6
ORDER BY   V.SITES_CODE

答案 1 :(得分:1)

Oracle没有任何默认sorting。你必须明确指定ORDER BY子句来回复排序。

添加,

ORDER BY V.SITES_CODE