我有一张桌子,让我们给它起个名字吧table1。
该表由许多列组成,其中一列是一个对象,它由 3 个子列组成,我们称它们为value1, value2, value3。
假设对象类型名为object_type1。
我准备了一个投影查询,如下所示:
Select typed_column.value1
from table1
Run Code Online (Sandbox Code Playgroud)
此投影不适用于 Oracle 11g,它显示“无效标识符”。
所以我尝试将表名添加到所选列:
Select table1.typed_column.value1
from table1
Run Code Online (Sandbox Code Playgroud)
它也没有奏效。
但是当我使用别名时:
Select tab1.typed_column.value1
from table1 tab1
Run Code Online (Sandbox Code Playgroud)
它正在工作。
我还发现了另一个同样有效的解决方案(使用treat 功能):
Select treat(typed_column as object_type1).value1
from table1
Run Code Online (Sandbox Code Playgroud)
我的问题是:别名有什么作用,数据库实际上知道如何映射对象类型列?
为什么我的前两个查询不能正常工作?
我准备了一个表和类型,表的 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
)