Oracle APEX - Сохранение выбранных элементов челнока в новой таблице - PullRequest
0 голосов
/ 14 марта 2012

У меня есть проект, над которым я работаю, где я имею дело с ЧАСТЯМИ и ЗАКАЗАМИ.Каждый ЗАКАЗ может содержать много ЧАСТЕЙ, и каждая ЧАСТЬ может находиться в более чем одном ЗАКАЗЕ в течение своей жизни (хотя не более чем в одном АКТИВНОМ ПОРЯДКЕ за один раз).Мои таблицы в настоящее время выглядят следующим образом:

 PARTS_TABLE
      PART_NUMBER varchar2(20)
      ASSIGNED_ORDER_NUMBER number(5)
      ASSIGNED_ORDER_STATUS varchar2(20)


 ORDER_TABLE
      ORDER_NUMBER number (5)
      ORDER_STATUS varchar2(20)
      ORDER_PARTS_LIST varchar2(4000) //Comma delimited list generated by shuttle item.

Эта текущая настройка работает для нас (с помощью этого предыдущего вопроса: Предыдущий вопрос ), но требует дублирования большого количества данных.в обеих таблицах, и это на самом деле не допускает, чтобы ЧАСТЬ находилась в нескольких ЗАКАЗАХ в течение своей жизни.

Я хотел бы создать таблицу перекрестных ссылок между этими двумя таблицами:

 ORDER_PARTS_TABLE
      ORDER_NUMBER number(5) (pk1)
      PART_NUMBER varchar2(20) (pk2)
      ORDER_STATUS varchar2(20)

Где PART_NUMBER и ORDER_NUMBER создают объединенный первичный ключ.

Моя основная проблема - создание и редактирование строк в ORDER_PARTS_TABLE на основе значения элемента челнока.Я могу эффективно редактировать / обновлять мои текущие настройки, но в моих текущих настройках я не пытаюсь создавать строки, я просто ссылаюсь на строки в PARTS_TABLE.Когда человек, используя элемент челнока в форме в APEX, добавляет PARTS к ORDER, в ORDER_PARTS_TABLE должны быть созданы новые строки, т.е.строка, относящаяся к этой взаимосвязи, должна быть либо удалена из ORDER_PARTS_TABLE, либо иметь для ORDER_STATUS значение «REMOVED»

 ORDER_TABLE
      ORDER_NUMBER     ORDER_PARTS_LIST     ORDER_STATUS
      12345            675:871:902          ACTIVE

 either...
 ORDER_PARTS_TABLE
      ORDER_NUMBER     PART_NUMBER     ORDER_STATUS
      12345            675             ACTIVE
      12345            342             REMOVED
      12345            871             ACTIVE
      12345            902             ACTIVE

  or...
  ORDER_PARTS_TABLE
      ORDER_NUMBER     PART_NUMBER     ORDER_STATUS
      12345            675             ACTIVE
      12345            871             ACTIVE
      12345            902             ACTIVE

Имеет ли что-нибудь из этого смысл?Мое текущее решение просто использует триггеры, которыми я был прилично доволен, но дайте мне знать, как лучше всего подойти к этой новой проблеме.Спасибо!

РЕДАКТИРОВАТЬ: Я продолжал копать и нашел что-то, что звучит достаточно многообещающе, если его можно адаптировать.Кто-нибудь здесь имел опыт работы с REGEXP_SUBSTR? LINK LINK

1 Ответ

3 голосов
/ 16 марта 2012

APEX предоставляет утилиту для разделения значений из элемента челнока, как это:

declare
    tab apex_application_global.vc_arr2;
begin
    tab := apex_util.string_to_table (:p1_multiple_item);
    ...
end;

Так что по вашему требованию вы можете сделать:

declare
    tab apex_application_global.vc_arr2;
begin
    tab := apex_util.string_to_table (:p1_multiple_item);
    for i in 1..tab.count loop
        insert into order_parts_table (order_number, part_number, order_status)
        values (:p1_order_number, tab(i), 'ACTIVE');
    end loop;
end;

(NB. Я не имел дела с тем, существует ли уже строка, но вы поняли.)

Процесс удаления предметов будет проходить в том же ключе, хотя и немного сложнее.

...