Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Oracle > TABLE OF OBJECT


Автор: setnull 24.6.2009, 11:51
Все здравствуйте!!!

Есть тип

Код

create or replace
TYPE ROBJ AS OBJECT
(
  f1 INTEGER,
  f2 INTEGER
);

create or replace 
TYPE tab_type AS TABLE OF ROBJ;


Далее

Код

declare
vtab tab_type;
begin

select
ROBJ(oter_tabs.a, oter_tabs.b)
collect bulk into vtab 
from oter_tabs;

for row in
(
select
*
from table(vtab )
....


Как достучаться у row к полям f1 и f2?

Спасибо!!!

Автор: Zloxa 24.6.2009, 12:51
Цитата(setnull @  24.6.2009,  11:51 Найти цитируемый пост)

Как достучаться у row к полям f1 и f2?

Вообще лучше бы тут обойтись PL/SQL
Код

  for i in 1..v_tab.count
  loop
    dbms_output.put_line(v_tab(i).f1||';'||v_tab(i).f2);
  end loop

но если уж очень хочется именно SQL то както так:
Код

  for i in (select value(t) cv
              from table (v_tab) t)
  loop
    dbms_output.put_line(i.cv.f1||';'||i.cv.f2);
  end loop;

Автор: setnull 24.6.2009, 13:21
Спасибо!!!

Автор: Nuzur 24.6.2009, 13:22
Вы умеете расположить к себе приведением полного кода что бы пользователям форума было приятно Вам отвечать
--сарказм конечно

Код

declare
vtab tab_type;
m_f1 INTEGER;

begin
select
ROBJ(oter_tabs.f1, oter_tabs.f2)
bulk collect into vtab 
from oter_tabs;
for row in
(
select
*
from table(vtab )
)
LOOP
    m_f1 := vtab(1).f1;
END LOOP;
END;
    


ЗЫ вместо 1цы конечно должен стоять счетчик но мне лениво... 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)