2014 dxdy logo

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

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




 
 Oracle, сделать select из tbl, построенную через bulk collec
Сообщение15.10.2010, 17:29 
Блин! Помогите! Даже не знаю, как у Яндекса спросить...
Я сделал переменную через 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 
Вариант: чего-то надо делать через 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 
Самое главное забыл :-) искомый запрос теперь принимает вид:
Код:
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 
Нет, не работает. Когда доходит до запроса, то говорит ORA-21700 object does not exist or is marked for delete.
...
Попробовал создать type as object...В результате начал ругаться на bulk collect, говорит, что там ORA-00947 not enough values, хотя раньше прекрасно все компилил...

Помогите :cry:

 
 
 [ Сообщений: 4 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group