我尝试过使用表函数,以便更好地抽象我的代码,然后将它与对象放在一起。但我的对象也有重复的代码(现在是重复的属性)所以我想使用组合来重用代码。
但我不知道如何从内部对象中提取数据。
以下是一个例子:
create or replace type inner_obj force as object (
some_attribute VARCHAR2(1 BYTE)
);
create or replace type outter_obj force as object (
inner_value inner_obj,
another_attribute VARCHAR2(1 BYTE)
);
create or replace type outter_tbl is table of outter_obj;
create or replace FUNCTION get_outters
RETURN outter_tbl PIPELINED IS
inner_ inner_obj;
outter_ outter_obj;
BEGIN
inner_ := inner_obj('A');
outter_ := outter_obj(inner_, 'X');
pipe row (outter_);
return;
END get_outters;
select * from table(get_outters());
"INNER_VALUE" "ANOTHER_ATTRIBUTE"
ZCDB.INNER_OBJ('A') "X"
select another_attribute from table(get_outters());
"ANOTHER_ATTRIBUTE"
"X"
select inner_.some_attribute from table(get_outters());
**NOPE**
如何从内部_ 中获取 some_attribute ?
答案 0 :(得分:1)
你需要的只是一个表别名,因为没有它,Oracle无法区分表列和表列的属性......
select XY.inner_value.some_attribute
from table(get_outters()) XY;