Копировать записи в Oracle Apex

Мне нужно скопировать выбранные значения строки и сохранить как новую запись. Я использую Oracle Apex 4.2 и Табличную форму. Мне нужно использовать флажок, чтобы выбрать строки и кнопку копирования. Когда я выбираю несколько строк, затем нажимаю кнопку "Копировать", чтобы скопировать все выбранные значения строк как новые строки и сохранить.

Может ли кто-нибудь помочь

1 ответ

Копирование записей с помощью ввода табличной формы APEX

Идея клонирования существующих записей из одной таблицы через табличную форму Oracle APEX работает без особого вмешательства в дизайн по умолчанию, который можно настроить с помощью мастера APEX для содержимого области страницы.

  1. Создайте таблицу с независимым первичным ключом.

  2. Предлагается включить две вспомогательные колонки: COPY_REQUEST а также COPIED_FROM для запуска операций копирования. Конкретные элементы формы будут сопоставлены с этими столбцами в табличной форме, которая будет настроена.

  3. Создайте хранимую процедуру Oracle, которая может прочитать, какие записи необходимо скопировать. Эта процедура будет вызываться каждый раз, когда SUBMIT кнопка нажата.

  4. (необязательно). Рассмотрите возможность включения подавления шага (3) в случае, когда нечего обрабатывать (т. е. нет записей, помеченных для копирования).

Рабочий стол для получения ввода: COPY_ME

COPY_ME Демонстрационная таблица для поддержки автоматического копирования записей

СОВЕТ: Вам будет легче, если вы воспользуетесь стандартным мастером создания ТАБЛИЦ. Обозначьте CUSTOMER_ID как PRIMARY_KEY и APEX создают свои стандартные функции автоинкремента сверху. (последовательность плюс триггер настроен.)

Вот пример данных, которые я использовал... хотя это не имеет значения. Вы можете указать свои собственные значения и легко проверить, что произошло.

COPY_ME - пример данных демонстрационной таблицы

Тяжелая атлетика: хранимая процедура клонирования записей в COPY_ME

Эта процедура работает с 1 или более записями одновременно со специальным идентификатором в COPY_REQUEST Таблица. После выполнения задачи процедура очищается и снова сбрасывает значение запроса.

 create or replace procedure proc_copy_me_request is

      c_request_code   CONSTANT   char(1):= 'Y';

      cursor copy_cursor is
         SELECT cme.CUSTOMER_ID, cme.CUSTOMER_NAME, cme.CITY, cme.COUNTRY,
                cme.COPY_REQUEST
           FROM copy_me cme
          WHERE cme.COPY_REQUEST = c_request_code
            FOR UPDATE OF cme.COPY_REQUEST;

 BEGIN

 FOR i in copy_cursor LOOP

    INSERT INTO copy_me (customer_name, city, country, copied_from)
    VALUES (i.customer_name, i.city, i.country, i.customer_id);

    UPDATE copy_me
       SET copy_request = null
     WHERE CURRENT OF copy_cursor;

 END LOOP;

 COMMIT;

 END proc_copy_me_request;

Существует также столбец, который можно скрыть. Он отслеживает, откуда была изначально скопирована запись.

Обратите внимание, что курсор использует FOR UPDATE OF а также WHERE CURRENT OF нотации. Это важно, потому что процедура изменяет записи, на которые она ссылается.

Инструкции по настройке страницы APEX

Установить стандарт FORM введите страницу и выберите TABULAR FORM стиль. Следуйте инструкциям по настройке, стараясь отобразить правильный первичный ключ, а также на объект последовательности PK, созданный с помощью таблицы в предыдущих шагах выше.

Вот как будет выглядеть ваша страница после выполнения этих шагов:

Конфигурация страницы COPY_ME на Apex

  1. РЕДАКТИРОВАТЬ COPY_REQUEST Значение формы:

    • В разделе атрибутов столбца измените параметр "Отображать как" на "простой флажок"
    • Под разделом списка значений поместите одно значение в определение LOV: Y (чувствителен к регистру в любом случае... просто будьте последовательны)
  2. РЕДАКТИРОВАТЬ COPIED_FROM Значение формы: в разделе атрибутов столбца измените параметр "Отображать как" на "Отображать как текст (сохранение состояния)". Это просто для того, чтобы пользователи не могли войти в это поле только для чтения. Вы также можете подавить это, если не важно знать.

  3. СОЗДАТЬ новый процесс: выполнить процедуру копирования

COPY_ME Главная страница определения пользовательского процесса

Это нижняя часть той же страницы конфигурации, есть несколько вещей, которые можно изменить или добавить:

COPY_ME Нижняя страница определения пользовательского процесса

Демонстрация: снимок экрана страницы табличной формы COPY_ME в действии

Первый скриншот ниже приведен до того, как страница приведена в порядок и установлен флажок.

COPY_ME Табличная форма: первая версия

Подключите некоторые тестовые данные и предоставьте их при попытке. Процесс обработки страницы, созданный на шаге выше, условно вызывает хранимую процедуру, которая обрабатывает все запросы на копирование, сделанные одновременно SUBMIT Кнопка формы выбрана.

COPY_ME Табличная форма: демонстрационная версия

КОММЕНТАРИИ. Если вы потратите достаточно времени на работу со встроенными мастерами в Oracle APEX, у вас появится возможность изучить новые шаблоны проектирования и процессы, совместимые с этим инструментом. Адаптация вашего подхода может уменьшить количество дополнительной работы и разочарования.

Другие вопросы по тегам