Помогите решить проблему!!!

GrandMaster
Дата: 31.05.2006 17:10:47
Имеется функция:

function func(str in string) return obj;

где obj

create or replace type obj as object
(
    name varchar2(100),
    ver varchar2(100),
    price varchar2(100)
)

Функцию которая выдает 3 поля:

select (select func(x.str) from dual) t from x

получаем

t.name | t.ver | t.price


кто нибудь знает как работать с этой таблицой?
на любые обращения к этим полям выдает ошибку.
то есть на запрос
select t.price from (select (select func(x.str) from dual) t from x)
или
select t.price from (select (select func(x.str) from dual) t from x) group by t.price

выдает ошибку ORA-00904 !!! Кто нибудь знает как решить проблему???
alex-ls
Дата: 31.05.2006 17:17:11
table
GrandMaster
Дата: 31.05.2006 17:18:45
По подробнее можно?
andrey_anonymous
Дата: 31.05.2006 19:56:49
SQL> create type ane_test_t as object (
    a number
  , c varchar2(100)
)
/

Type created

SQL> create or replace function ane_test_f(i_val varchar2) return ane_test_t as
  l_tmp ane_test_t := ane_test_t(null,null);
begin
  l_tmp.a := 1;
  l_tmp.c := substr(i_val,1,100);
  return l_tmp;
end;
/

Function created

SQL> select ane_test_f(str) from (select 'some text' str from dual connect by level < 5);

ANE_TEST_F(STR)
---------------
<Object>
<Object>
<Object>
<Object>

SQL> select ane_test_f(str).a,ane_test_f(str).c  from (select 'some text' str from dual connect by level < 5);

ANE_TEST_F(STR).A ANE_TEST_F(STR).C
----------------- --------------------------------------------------------------------------------
                1 some text
                1 some text
                1 some text
                1 some text

SQL> create type ane_test_ttab is table of ane_test_t
/

Type created

SQL> select * from TABLE(
  select CAST(collect(ane_test_f(str)) as ane_test_ttab) from (select 'some text' str from dual connect by level < 5)
);

         A C
---------- --------------------------------------------------------------------------------
         1 some text
         1 some text
         1 some text
         1 some text

SQL> 
andrey_anonymous
Дата: 31.05.2006 20:19:31
Да, забыл солюшн по Вашему варианту :)
select t.o.a, t.o.c from(select ane_test_f(str) o  from (select 'some text' str from dual connect by level < 5)) t;

       O.A O.C
---------- --------------------------------------------------------------------------------
         1 some text
         1 some text
         1 some text
         1 some text
Stax.
Дата: 31.05.2006 21:08:24
SQL> create or replace type obj as object
  2  (
  3      name varchar2(100),
  4      ver varchar2(100),
  5      price varchar2(100)
  6  )
  7  
  8  /

Type created.

SQL> ed
Wrote file afiedt.buf

  1  create or replace
  2  function func(str in string)
  3  return obj
  4  is
  5  begin
  6  return obj('Stax','1.0','-1');
  7* end;
  8  /

Function created.
SQL> ed
Wrote file afiedt.buf

  1  select
  2   t.f.name
  3  ,t.f.ver
  4  ,t.f.price
  5*  from (select func('1') f from dual) t
SQL> /

F.NAME
--------------------------------------------
F.VER
--------------------------------------------
F.PRICE
--------------------------------------------
Stax
1.0
-1

....
stax