2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Oracle, сделать select из tbl, построенную через bulk collec
Сообщение15.10.2010, 17:29 
Заслуженный участник


08/04/08
8562
Блин! Помогите! Даже не знаю, как у Яндекса спросить...
Я сделал переменную через bulk collect по принципу:
Код:
select FIELD1, ... , FİELDk
bulk collect into tbl
from TABLE1,...,TABLEk
where RESTRICTIONS


Теперь хочу и этой переменной сделать select по принципу:
Код:
select
  Tbl(dum.RNUM).FİELD1,
  ...,
  Tbl(dum.RNUM).FİELDk
from
  (select rownum as RNUM
  from DUMMY
  where rownum <= iCnt) dum
where RESTRICTIONS

А Oracle говорит мне
Oracle писал(а):
dum.RNUM must be declared

Что делать.... китайский код писать?... :cry:

 Профиль  
                  
 
 Re: Oracle, сделать select из tbl, построенную через bulk collec
Сообщение15.10.2010, 19:05 
Заслуженный участник


08/04/08
8562
Вариант: чего-то надо делать через pipelined. Щас попробую и скажу. Но лучше все равно напишите, вдруг там какие-то тонкости есть...

-- Пт окт 15, 2010 20:56:04 --

Делается так:
В пакете U_Pkg в заголовке описывается тип и функция:
Код:
  type TRec is record (
    FİELD1 type1,
    ...
    FİELDk typek
  );
 
  type TTbl is table of TRec;

  function TblToSelect(
    p_Tbl U_Pkg.TTbl
  ) return U_Pkg.TTbl pipelined;

(причем при объявлении коллекции массивов index by binary_integer нельзя использовать!)
И в теле описывается функция:
Код:
  function TblToSelect(
    p_Tbl U_Pkg.TTbl
  )
  return U_Pkg.TTbl pipelined
  as
    rec U_Pkg.TRec;
    j integer;
    TblCnt integer;
  begin
    TblCnt := p_Tbl.count;
    for j in 1..TblCnt loop
      rec.FİELD1 := p_Tbl(j).FİELD1;
      ...
      rec.FİELDk := p_Tbl(j).FİELDk;
      pipe Row(rec);
    end loop;
    return;
  end;


Спасибо за внимание

(модераторам)

извините, что не совсем точно выбрал форум


-- Пт окт 15, 2010 20:56:31 --

Тему можно закрыть.

 Профиль  
                  
 
 Re: Oracle, сделать select из tbl, построенную через bulk collec
Сообщение15.10.2010, 20:16 
Заслуженный участник


08/04/08
8562
Самое главное забыл :-) искомый запрос теперь принимает вид:
Код:
select
  t.FİELD1,
  ...
  t.FİELDk
from
   (select * from
  table(TblToSelect(Tbl))) t
where RESTRİCTİONS


-- Пт окт 15, 2010 21:23:10 --

Черт! Чушь написал! :evil:
Правильно так:
Код:
select
  t.FİELD1,
  ...
  t.FİELDk
from
  (select * from
  table(Tbl)
  ) t
where RESTRİCTİONS

И больше ничего не надо...
Хотя без объявления функции у меня компилятор перестает компилировать запрос...
Чушь какая-то.
Короче, кому надо, разберутся...

 Профиль  
                  
 
 Re: Oracle, сделать select из tbl, построенную через bulk collec
Сообщение15.10.2010, 21:44 
Заслуженный участник


08/04/08
8562
Нет, не работает. Когда доходит до запроса, то говорит ORA-21700 object does not exist or is marked for delete.
...
Попробовал создать type as object...В результате начал ругаться на bulk collect, говорит, что там ORA-00947 not enough values, хотя раньше прекрасно все компилил...

Помогите :cry:

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group