3

为什么 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

(这工作正常)

4

1 回答 1

3

首先总是使用别名。

其次,这里是关于视图的甲骨文原因:

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

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

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

于 2012-10-28T06:04:45.117 回答