在解除引用对象时,为什么Oracle需要视图中的列的别名?

时间:2012-10-28 05:56:20

标签: sql oracle

为什么Oracle在解除引用对象时需要视图中的列的别名?

例如:

CREATE VIEW view AS SELECT t.eno, t.workdept.dname, t.salary FROM table t
                                  *
ERROR at line 1:
ORA-00998: must name this expression with a column alias

(workdept是一个对象引用)

可以通过将t.workdept.dname更改为t.workdept.dname AS alias来解决此问题。

我的问题是,为什么要强制执行?为什么不直接使用属性名称workdept.dname,例如:

SELECT t.eno, t.workdept.dname, t.salary FROM table t

(这很好)

1 个答案:

答案 0 :(得分:3)

首先总是使用别名。

其次,这是与观点相关的oracle原因:

http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_8004.htm

  

如果省略别名,数据库将从查询中的列或列别名派生它们。因此,如果查询包含表达式而不是列名,则必须使用别名。此外,如果视图定义包含约束,则必须指定别名。

Oracle将对象引用视为表达式而不是表列。