为啥在使用嵌套查询时不能引用用户定义的类型字段?

Posted

技术标签:

【中文标题】为啥在使用嵌套查询时不能引用用户定义的类型字段?【英文标题】:Why can't I reference a user defined type field when using nested queries?为什么在使用嵌套查询时不能引用用户定义的类型字段? 【发布时间】:2008-11-05 20:33:36 【问题描述】:

所以我的 oracle 数据库中有以下用户定义类型:

CREATE OR REPLACE TYPE METRIC_IMPERIAL_DISTANCE AS OBJECT
(
  METERS_FEET INTEGER,
  CENTIMETERS_INCHES INTEGER,
  FRACTION NUMBER
)

我可以做到以下几点:

SELECT t_id, get_distance_breakdown (h.height, h.unit_of_measure_id) height_breakdown
        FROM   heights h

甚至

SELECT t_id, get_distance_breakdown (h.height, h.unit_of_measure_id).meters_feet height_meters_feet
        FROM   heights h

但以下失败并出现 ORA-00904:“HEIGHT_BREAKDOWN”。“METERS_FEET”:标识符无效错误:

SELECT t_id, height_breakdown.meters_feet
FROM   (SELECT t_id, get_distance_breakdown (h.height, h.unit_of_measure_id) height_breakdown
        FROM   heights h);

什么给了?如果对此没有一些简单而明显的解决方法,那么这将大量减少对 oracle 的用户定义类型有用的东西。我觉得我一定是错过了什么。

【问题讨论】:

【参考方案1】:

我认为 Oracle 需要为内联视图提供别名:

SELECT v.t_id, v.height_breakdown.meters_feet
FROM   (SELECT t_id, get_distance_breakdown (h.height, h.unit_of_measure_id) height_breakdown
        FROM   heights h) v;

【讨论】:

以上是关于为啥在使用嵌套查询时不能引用用户定义的类型字段?的主要内容,如果未能解决你的问题,请参考以下文章

在sql中对不相关嵌套查询的处理原则

mysql怎么在查询中嵌套子查询

SQL Server 之 子查询与嵌套查询

为啥结构对齐取决于字段类型是原始类型还是用户定义?

oracle嵌套where查询

在 GraphQL 中不能有带有嵌套字段的输入类型。错误:预期类型是 GraphQLInputType,但不是