Псевдоним столбцов требуется при создании представления - почему? - PullRequest
2 голосов
/ 24 мая 2019

сегодня, когда я создавал представление, я столкнулся с одной из самых глупых ошибок в Oracle. Приступая к делу, я попытался выполнить этот простой запрос:

CREATE VIEW dept_agg AS 
SELECT department_id, MIN(salary), MAX(salary)
FROM employees
GROUP BY department_id;

но я получил ошибку, сказав:

ORA-00998: должен называть это выражение псевдонимом столбца 00998. 00000 - «должен называть это выражение псевдонимом столбца»

Может кто-нибудь объяснить мне, почему псевдоним столбцов так необходим Oracle в приведенном выше запросе? Тем более, что псевдоним не нужен, когда я не создаю представление, а просто выполняю оператор выбора?

Ответы [ 2 ]

2 голосов
/ 24 мая 2019

Вам, наверное, любопытно, если вы запустите это, оно работает

SELECT department_id, MIN(salary), MAX(salary)
FROM employees

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

Идентификаторы без кавычек могут содержать только буквенно-цифровые символы из набора символов вашей базы данных, а также подчеркивание (_), знак доллара ($) и знак фунта (#)

Следовательно, вам необходимо предоставить легальные псевдонимы для ваших динамических столбцов. И как это сделать, объясняет @ Гордон ... в своем ответе

2 голосов
/ 24 мая 2019

Вы создаете представление, и представлению нужны имена для столбцов, как в таблице.Обычно это делается с использованием псевдонимов:

CREATE VIEW dept_agg AS    
    SELECT department_id, MIN(salary) as min_salary, MAX(salary) as max_salary
    FROM employees
    GROUP BY department_id;

Вы также можете включить имена как часть самого представления:

CREATE VIEW dept_agg(department_id, min_salary, max_salary) AS    
    SELECT department_id, MIN(salary), MAX(salary)
    FROM employees
    GROUP BY department_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...