我有一张名为
该表格包含许多列,其中一列是一个对象,它由3个子列构成,我们称其为
假设该对象类型的名称为
我准备了一个投影查询,它的形式如下:
我的问题是:别名(alias)的作用是什么,数据库如何实际映射对象类型的列?
为什么我的前两个查询没有正确工作?
我准备了一个表和类型,表的DDL如下:
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
它正在运行。
我还发现另一种解决方案也可以使用(使用treat函数):
Select treat(typed_column as object_type1).value1
from table1
我的问题是:别名(alias)的作用是什么,数据库如何实际映射对象类型的列?
为什么我的前两个查询没有正确工作?
我准备了一个表和类型,表的DDL如下:
CREATE TABLE table1
(
--....很多其他列前面
typed_column OBJECT_TYPE_1
)
对象的DDL如下:
CREATE OR REPLACE TYPE "MY_SCHEMA"."OBJECT_TYPE_1" is object
(
value1 varchar2(100),
value2 date,
value3 date
)
Select table1.typed_column.value1 from table1
,如何进行内部捕获呢? 您的评论很有价值,但它并不是对问题的回答。我仍然不知道在这种特定情况下别名是如何起作用的。 - Bartosz Olchowik