选择带别名,不带oracle 11g有什么区别

问题描述 投票:1回答:1

我有一张桌子,我们命名为table1

表由许多列组成,其中一列是一个对象,由3个子列组成,我们称它们为value1value2value3

假设对象类型命名为object_type1

我准备了一个投影查询,看起来像这样:

Select typed_column.value1 
from table1

此预测在Oracle 11g上不起作用,它说'无效标识符'。

所以我试图将表的名称添加到所选列:

Select table1.typed_column.value1 
from table1

也没有用。

但是当我使用别名时:

Select tab1.typed_column.value1 
from table1 tab1

正在运行。

我还发现了另一个可行的解决方案(使用treat函数):

Select treat(typed_column as object_type1).value1 
from table1

我的问题是:别名实际上是什么,数据库实际上知道如何映射对象类型的列?

为什么我的前两个查询无法正常工作?

我准备了一个表和类型,表的DDL看起来像:

CREATE TABLE table1 ( --....lot of other columns before typed_column OBJECT_TYPE_1 )

和对象的DDL:

CREATE OR REPLACE TYPE "MY_SCHEMA"."OBJECT_TYPE_1" is object ( value1 varchar2(100), value2 date, value3 date )

sql oracle select alias user-defined-types
1个回答
0
投票

您不应在查询的两边都引用该表。如果要从表A中选择数据,请不要选择A.B.C。只需从A]中选择B.C

© www.soinside.com 2019 - 2024. All rights reserved.