如何在从table()中选择时访问内部对象的属性?

时间:2016-06-21 16:40:44

标签: oracle plsql

我尝试过使用表函数,以便更好地抽象我的代码,然后将它与对象放在一起。但我的对象也有重复的代码(现在是重复的属性)所以我想使用组合来重用代码。

但我不知道如何从内部对象中提取数据。

以下是一个例子:

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

1 个答案:

答案 0 :(得分:1)

你需要的只是一个表别名,因为没有它,Oracle无法区分表列和表列的属性......

select XY.inner_value.some_attribute
from table(get_outters()) XY;