为什么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
(这很好)
答案 0 :(得分:3)
首先总是使用别名。
其次,这是与观点相关的oracle原因:
http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_8004.htm
如果省略别名,数据库将从查询中的列或列别名派生它们。因此,如果查询包含表达式而不是列名,则必须使用别名。此外,如果视图定义包含约束,则必须指定别名。
Oracle将对象引用视为表达式而不是表列。