1

所以我的 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": invalid identifier 错误:

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 的用户定义类型有用的东西。我觉得我一定是错过了什么。

4

1 回答 1

3

我相信 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;
于 2008-11-05T20:45:23.580 回答