Позволяет обрезать вопрос до минимума, убрать UNION
, остальные столбцы и использовать таблицу DUAL
:
SELECT DUMMY -- comment
FROM DUAL;
Это выводит:
| DUMMY |
|-------|
| X |
Оператор ссылается на столбец в таблице, поэтому имя столбца будет использоваться в качестве псевдонима в выходных данных оператора.
Однако, если мы не ссылаемся на столбец и используем литерал:
SELECT NULL -- comment
FROM DUAL;
Будет выведено:
| NULL--COMMENT |
|---------------|
| X |
и Oracle сгенерирует имя столбца из текста оператора SQL, а псевдоним для столбца в выходных данных будет текст запроса между ключевыми словами SELECT
и FROM
, поэтому имя будет NULL -- comment
с пропущенными пробелами.
Так что SELECT NULL FROM DUAL
будет иметь имя столбца NULL
.
Несколько более сложная версия с другими литеральными значениями:
SELECT NULL --comment here
, NULL /* other comment */,
'LITERAL' -- third comment
, 0 /* fourth comment */
FROM DUAL
Ни один из сгенерированных столбцов не ссылается на именованный столбец таблицы, поэтому Oracle сгенерирует имя из SQL и выведет:
| NULL--COMMENTHERE | NULL/*OTHERCOMMENT*/ | 'LITERAL'--THIRDCOMMENT | 0/*FOURTHCOMMENT*/ |
|-------------------|----------------------|-------------------------|--------------------|
| (null) | (null) | LITERAL | 0 |
и вы можете видеть, что имена столбцов генерируются из списка предложений выбора оператора SQL, разделенного запятыми.
Оператор SQL с UNION
будет принимать имена столбцов из первого предложения SELECT
(перед UNION
), поэтому:
SELECT NULL -- comment
FROM DUAL
UNION ALL
SELECT DUMMY
FROM DUAL;
Выходы:
| NULL--COMMENT |
|---------------|
| (null) |
| X |
Имя столбца будет от первого оператора, а не от второго (ниже UNION
), который ссылается на столбец.
Если вы хотите переопределить имя столбца по умолчанию, используйте псевдоним:
SELECT NULL "NULL" --comment here
, NULL AS other /* other comment */,
'LITERAL' AS literal -- third comment
, 0 AS "0" /* fourth comment */
FROM DUAL
Выходы:
| NULL | other | LITERAL | 0 |
|--------|--------|---------|---|
| (null) | (null) | LITERAL | 0 |
и псевдонимы используются, а комментарии были проигнорированы.