小编Bar*_*wik的帖子

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

我有一张桌子,让我们给它起个名字吧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 )

sql oracle select alias user-defined-types

6
推荐指数
1
解决办法
266
查看次数

标签 统计

alias ×1

oracle ×1

select ×1

sql ×1

user-defined-types ×1