Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 取消引用对象时,Oracle为什么要求视图中的列使用别名?_Sql_Oracle - Fatal编程技术网

Sql 取消引用对象时,Oracle为什么要求视图中的列使用别名?

Sql 取消引用对象时,Oracle为什么要求视图中的列使用别名?,sql,oracle,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.workde

取消引用对象时,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作为别名来解决

我的问题是,为什么要强制执行?为什么不直接使用属性名
workdept.dname
,就像在非关联选择中一样,例如:

从表t中选择t.eno、t.workdept.dname、t.salary


(这很好)

首先始终使用别名

其次,以下是oracle关于视图的原因:

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

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

“始终使用别名”?没有必要每次都对每一列使用别名。您可能希望在视图中调用与在表中调用相同的列。