Итак, у меня в базе данных 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. Я чувствую, что что-то упускаю.


Я считаю, что 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;