Oracle 9.2 - Порядок игнорируется, если порядок по столбцам не первый - PullRequest
0 голосов
/ 10 марта 2020

Я новичок в Oracle SQL, и недавно обнаружил, что мой оператор 'Order By' игнорируется в сценариях P / L SQL при создании временных таблиц, если я не размещаю порядок по столбцам в начале списка выбранных столбцов.

т.е. этот оператор возвращает неупорядоченный набор результатов, мой порядок по игнорируемому (кажется, фактически сортировка по столбцу A.ACCOUNT_ID - числовой / целочисленный уникальный идентификатор)

SELECT
    A.ACCOUNT_ID,
    PRODUCT_CATEGORY,
    PRODUCT_NAME,
    PRICE,
    COST,
    QUANTITY
FROM
    TABLEA   A
    LEFT JOIN TABLEB   B ON A.ACCOUNT_ID = B.ACCOUNT_ID
ORDER BY
    PRODUCT_CATEGORY,
    PRODUCT_NAME

Но это работает хорошо, упорядочив набор результатов, как задумано и написано

SELECT

    PRODUCT_CATEGORY,
    PRODUCT_NAME,
    A.ACCOUNT_ID,
    PRICE,
    COST,
    QUANTITY
FROM
    TABLEA   A
    LEFT JOIN TABLEB   B ON A.ACCOUNT_ID = B.ACCOUNT_ID
ORDER BY
    PRODUCT_CATEGORY,
    PRODUCT_NAME

Есть идеи, почему это происходит? Я помню, что на сервере SQL происходило что-то похожее (то есть CTE будет предупреждать порядок, игнорируемый в общих табличных выражениях или что-то в этом роде), - но в этом случае нет CTE - пример выражения end, который я здесь имею, идет в конце скрипт, который создает несколько временных таблиц и создает окончательную временную таблицу, в которой я хочу упорядочить набор результатов.

Буду признателен за любую мудрость, которой вы все должны поделиться.

Спасибо!

1 Ответ

1 голос
/ 10 марта 2020

создает окончательную временную таблицу, в которой я хочу упорядочить результирующий набор

Стандартная Oracle таблица является организованной кучей таблицей это означает, что строки хранятся не в определенном порядке.

Таким образом, порядок возврата при возврате строк никогда не гарантируется, если вы явно не используете предложение ORDER BY при выборе строк. Вы не можете контролировать порядок при сохранении данных в таблице.

Из Oracle документации :

heap-organized table

A table in which the data rows are stored in no particular order on disk. 
By default, CREATE TABLE creates a heap-organized table.
...