创建视图时需要列别名-为什么?

时间:2019-05-24 20:25:40

标签: sql oracle oracle11g

今天,当我创建视图时,我遇到了oracle中最严重的错误之一。到此为止,我试图执行此简单查询:

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

但我说错了:

  

ORA-00998:必须使用列别名来命名该表达式   00998. 00000-“必须用列别名命名此表达式”

有人可以解释一下为什么在上面的查询中Oracle如此需要列别名吗?特别是当我不创建视图而仅运行select语句时,不需要该别名吗?

2 个答案:

答案 0 :(得分:2)

您正在创建一个视图,该视图需要像表一样的列名称。通常使用别名完成此操作:

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;

答案 1 :(得分:2)

您可能很好奇,如果运行此命令,它将起作用

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

但是,作为观点的一部分,这是一个问题。这是因为无论您的查询窗口是什么,它都只会显示您为该字段输入的内容。这就像是动态名称,不会存储到数据库中。但是要存储定义,oracle有规则

  

未加引号的标识符只能包含数据库字符集中的字母数字字符以及下划线(_),美元符号($)和井号(#)

因此,您需要为动态列提供合法的别名。 @Gordon在他的回答中解释了如何做