Oracle DB simple SELECT, где важен порядок столбцов

Я делаю простой оператор SELECT в базе данных Oracle, и мне нужно выбрать столбцы в некотором определенном порядке. Пример:

Таблица A имеет 100 атрибутов, один из которых - «глава», который находится где-то в порядке столбцов в таблице. Мне нужно выбрать данные с «главой» вначале, а остальные столбцы после них в произвольном порядке. По сути, мое заявление должно выглядеть примерно так:

SELECT a.chapter, a. *the remaining columns* FROM A

Кроме того, я не могу просто набрать:

SELECT a.chapter, a.*

потому что это выберет "главу" дважды.

Я знаю, что оператор SQL кажется простым, но если я знаю, как решить эту проблему, я могу экстраполировать эту мысль на более сложные области. Также предположим, что я не могу просто прокрутить, чтобы найти столбец «глава» и перетащить его в начало.

Спасибо.

Ответов (6)

Если у вас нет на то веской причины, вам не следует использовать SELECT * в запросах. Это приведет к поломке вашего приложения при каждом изменении схемы.

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

Быстрый способ обойти это - SELECT a.chapter AS chapterCol, a. * FROM table a; Это означает, что будет один столбец с именем chapterCol (при условии, что там еще нет столбца с именем chapterCol .;))

Вы не должны выбирать * в программе. По мере развития вашей схемы она будет вводить вещи, о которых вы еще не знали. Подумайте, что произойдет, если кто-то добавит столбец со всей книгой? Запрос, который, как вы думали, будет очень дешевым, внезапно начинает приносить мегабайты данных.

Это означает, что вам нужно указать все нужные столбцы.

Вот как я бы построил ваш запрос, не вводя все имена, но с некоторыми ручными усилиями.

Начните с «Выбрать главу».

Теперь выполните еще один выбор в своей базе данных, как показано ниже:

выберите ',' || имя_столбца из user_tab_cols, где table_name = your_real_table_name и column_name <> 'CHAPTER';

Теперь возьмите результат в виде вырезания и вставки и добавьте его к тому, с чего вы начали. Теперь запустите этот запрос. Это должно быть то, о чем вы просили.

Та-да!

Если вы собираетесь встраивать «SELECT *» в программный код, я настоятельно рекомендую этого не делать. Как отмечалось предыдущими авторами, вы настраиваете код для прерывания, если столбец когда-либо добавляется в таблицу (или удаляется из нее). Простой совет - не делайте этого.

Если вы используете это в инструментах разработки (просмотр данных и т. Д.). Затем я бы порекомендовал создать представление с нужным вам порядком столбцов. Захватите вывод «SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS» и создайте оператор выбора для представления с нужным вам порядком столбцов.