Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Коллекции  [new]
new_igor
Member

Откуда: НЕ Масквэ
Сообщений: 768
Нужно заполнить коллекцию на основе таблицы
Create table operation_type_influence
(INFLUENCE_ID NUMBER,
INFLUENCE_TYPE NUMBER,
INFLUENCE_CLASS NUMBER,
DEPENDENT_TYPE NUMBER,
DEPENDENT_CLASS NUMBER,
PACKAGE_ID NUMBER
);
а потом вставить эти данные из коллекции в таблицу:
CREATE TABLE INFLUENCE_ARRAY
(
PACKAGE_ID NUMBER,
ITEM_ID NUMBER,
OPR_TYPE_ID NUMBER,
CLASS_ID NUMBER
);
P.S. opr_type_id это FK (influence_id), class_id это тоже FK(influence_class). ITEM_ID просто значения счетчика, то есть 1,2,3 и т.д. (по кол-ву записей).
Если не трудно помогите примером. Заранее благодарен.
17 июл 07, 10:58    [4396669]     Ответить | Цитировать Сообщить модератору
 Re: Коллекции  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
А зачем в середине коллекция?
А вообще:
1) select ... bulk collect into
2) forall ... insert
17 июл 07, 11:05    [4396708]     Ответить | Цитировать Сообщить модератору
 Re: Коллекции  [new]
new_igor
Member

Откуда: НЕ Масквэ
Сообщений: 768
Начальство считает, что надо. Пока держит в секрете, но так надо сделать.
17 июл 07, 11:08    [4396727]     Ответить | Цитировать Сообщить модератору
 Re: Коллекции  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
new_igor
Пока держит в секрете, но так надо сделать.
Як у Вас строго :) А может начальство ошибается? :) ИМХО разработчик, который не знает цели разработки - это ...
17 июл 07, 11:11    [4396747]     Ответить | Цитировать Сообщить модератору
 Re: Коллекции  [new]
new_igor
Member

Откуда: НЕ Масквэ
Сообщений: 768
Если так?
create or replace type oper_type_list_t as table of operation_type_influence;
create or replace type body oper_type_t as object(opr_type_id number, class_id number, is_first number);
create or replace procedure infill_collection()
is
i pls_integer;
v oper_type_list_t := oper_type_list_t();
begin
v.extend(A.count);
for i in A.first .. A.last loop
v(i) :=operation_type_influence(i);
end loop;
SELECT * BULK COLLECT INTO v FROM operation_type_influence;
FORALL i IN v.FIRST..v.Last
INSERT INTO influence_array VALUES v(i);
end infill_collection;
17 июл 07, 11:12    [4396754]     Ответить | Цитировать Сообщить модератору
 Re: Коллекции  [new]
new_igor
Member

Откуда: НЕ Масквэ
Сообщений: 768
просто этот объект всего лишь винтик в огромной системе и объяснять все для чего это надо будет долго. А начальство пока еще не ошибалось.
17 июл 07, 11:13    [4396764]     Ответить | Цитировать Сообщить модератору
 Re: Коллекции  [new]
Proteus
Member

Откуда:
Сообщений: 1348
new_igor
Если так?
create or replace type oper_type_list_t as table of operation_type_influence;
create or replace type body oper_type_t as object(opr_type_id number, class_id number, is_first number);
create or replace procedure infill_collection()
is
  i pls_integer;
  v oper_type_list_t := oper_type_list_t();
begin
  v.extend(A.count);
  for i in A.first .. A.last loop
    v(i) :=operation_type_influence(i);
  end loop;
  SELECT * BULK COLLECT INTO v FROM operation_type_influence;
  FORALL i IN v.FIRST..v.Last
  INSERT INTO influence_array VALUES v(i);
end infill_collection;

Здесь ошибок больше чем правильного текста.
1. что такое a.count
2. operation_type_influence имеет не 4 поля
3. influence_array не такие поля имеет как v да и не заработает так.
17 июл 07, 11:21    [4396805]     Ответить | Цитировать Сообщить модератору
 Re: Коллекции  [new]
Proteus
Member

Откуда:
Сообщений: 1348
DECLARE
  TYPE tn IS TABLE OF NUMBER;
  v_PACKAGE_ID  tn;
  v_OPR_TYPE_ID tn;
  v_CLASS_ID    tn;
BEGIN
  SELECT PACKAGE_ID, influence_id, influence_class BULK COLLECT
    INTO v_PACKAGE_ID, v_OPR_TYPE_ID, v_CLASS_ID
    FROM operation_type_influence;
  FORALL i IN 1 .. v_PACKAGE_ID.COUNT
    INSERT INTO INFLUENCE_ARRAY
      (PACKAGE_ID, ITEM_ID, OPR_TYPE_ID, CLASS_ID)
    VALUES
      (v_PACKAGE_ID(i), i, v_OPR_TYPE_ID(i), v_CLASS_ID(i));
END;

наверное так но я сомневаюсь о правильности описания поля item_id, автором сказано, что это номер строки. Но может это быть и последовательность... :)
17 июл 07, 11:34    [4396899]     Ответить | Цитировать Сообщить модератору
 Re: Коллекции  [new]
new_igor
Member

Откуда: НЕ Масквэ
Сообщений: 768
Спасибо за помощь!!!!!!
17 июл 07, 11:36    [4396907]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить