【发布时间】:2020-01-28 11:04:10
【问题描述】:
我有一张桌子,我们把它命名为table1。
表格由许多列组成,其中一列是一个对象,由3个子列组成,我们称它们为value1、value2、value3。
假设对象类型名为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
它正在工作。
我还发现了另一个同样有效的解决方案(使用处理功能):
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
)
【问题讨论】:
-
您能分享您的表格 DDL 以便我们试用您的用例吗?
-
这个查询:
Select table1.typed_column.value1 from table1怎么可能发生内部捕获呢?您的评论很有价值,但它不是问题的答案。我仍然不知道在这种特定情况下 alias 做了什么来使它工作.. -
@thatjeffsmith DDL 现在可用
标签: sql oracle select alias user-defined-types