Несоответствие имени столбца Oracle 12c

Итак, у меня есть небольшая проблема с Oracle 12c. Всякий раз, когда я делаю такой запрос, как

SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE table_name = 'EMP';

Я получаю имена столбцов в правильном порядке

empno
ename
...

но когда я снова запускаю его, имена столбцов меняются местами.

deptno
comm
...
ename
empno

Кто-нибудь знает, почему это происходит? Это новая «функция» реализована в 12c, или я просто ошибаюсь? И самое главное, есть ли способ исправить это? Заранее спасибо и извините, если это глупый вопрос.


person districktt    schedule 19.05.2015    source источник
comment
Какой правильный порядок? Добавьте ORDER BY, чтобы всегда получать один и тот же заказ. (В противном случае вы не можете ожидать какого-либо конкретного заказа.)   -  person jarlh    schedule 19.05.2015
comment
конечно, вы должны использовать ORDER BY для получения детерминированного вывода. Неужели это меняется каждый раз? Oracle обычно не так часто меняет планы выполнения. Изменение в планах выполнения может быть вызвано: перерасчетом статистики, любопытством к динамической выборке или базовыми показателями производительности. Если план выполнения действительно менялся при каждом выполнении, возможно, вы обнаружили ошибку в Oracle.   -  person ibre5041    schedule 19.05.2015
comment
Дело в том, что всякий раз, когда я запускаю этот запрос в базе данных 11g, результат остается неизменным (первое, что я опубликовал, порядок столбцов - тот, который был указан при первом создании таблицы). Но когда я делаю тот же запрос в базе данных 12c, первый результат - это первое сообщение, а следующее - второй результат. Не знаю, почему это происходит. Может это только я.   -  person districktt    schedule 19.05.2015
comment
Теоретически это может быть вызвано функцией под названием «Базовые показатели производительности». Oracle помнит exec. планы запросов, а также некоторые реальные данные о производительности для каждого плана. Оптимизатор может сгенерировать неоптимальный план для первого выполнения. Затем после выполнения он замечает, что план не сработал так хорошо, поэтому возвращается к предыдущему плану из репозитория базовых показателей производительности. Трудно проверить, действительно ли вы видите exec. планы на каждое исполнение.   -  person ibre5041    schedule 20.05.2015


Ответы (1)


Использовать

order by column_id;

и вы всегда получите правильный порядок столбцов

person Dmitry.Samborskyi    schedule 19.05.2015