Копировать записи в Oracle Apex
Мне нужно скопировать выбранные значения строки и сохранить как новую запись. Я использую Oracle Apex 4.2 и Табличную форму. Мне нужно использовать флажок, чтобы выбрать строки и кнопку копирования. Когда я выбираю несколько строк, затем нажимаю кнопку "Копировать", чтобы скопировать все выбранные значения строк как новые строки и сохранить.
Может ли кто-нибудь помочь
1 ответ
Копирование записей с помощью ввода табличной формы APEX
Идея клонирования существующих записей из одной таблицы через табличную форму Oracle APEX работает без особого вмешательства в дизайн по умолчанию, который можно настроить с помощью мастера APEX для содержимого области страницы.
Создайте таблицу с независимым первичным ключом.
Предлагается включить две вспомогательные колонки:
COPY_REQUEST
а такжеCOPIED_FROM
для запуска операций копирования. Конкретные элементы формы будут сопоставлены с этими столбцами в табличной форме, которая будет настроена.Создайте хранимую процедуру Oracle, которая может прочитать, какие записи необходимо скопировать. Эта процедура будет вызываться каждый раз, когда
SUBMIT
кнопка нажата.(необязательно). Рассмотрите возможность включения подавления шага (3) в случае, когда нечего обрабатывать (т. е. нет записей, помеченных для копирования).
Рабочий стол для получения ввода: COPY_ME
СОВЕТ: Вам будет легче, если вы воспользуетесь стандартным мастером создания ТАБЛИЦ. Обозначьте CUSTOMER_ID
как PRIMARY_KEY и APEX создают свои стандартные функции автоинкремента сверху. (последовательность плюс триггер настроен.)
Вот пример данных, которые я использовал... хотя это не имеет значения. Вы можете указать свои собственные значения и легко проверить, что произошло.
Тяжелая атлетика: хранимая процедура клонирования записей в 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_REQUEST
Значение формы:- В разделе атрибутов столбца измените параметр "Отображать как" на "простой флажок"
- Под разделом списка значений поместите одно значение в определение LOV: Y (чувствителен к регистру в любом случае... просто будьте последовательны)
РЕДАКТИРОВАТЬ
COPIED_FROM
Значение формы: в разделе атрибутов столбца измените параметр "Отображать как" на "Отображать как текст (сохранение состояния)". Это просто для того, чтобы пользователи не могли войти в это поле только для чтения. Вы также можете подавить это, если не важно знать.СОЗДАТЬ новый процесс: выполнить процедуру копирования
Это нижняя часть той же страницы конфигурации, есть несколько вещей, которые можно изменить или добавить:
Демонстрация: снимок экрана страницы табличной формы COPY_ME в действии
Первый скриншот ниже приведен до того, как страница приведена в порядок и установлен флажок.
Подключите некоторые тестовые данные и предоставьте их при попытке. Процесс обработки страницы, созданный на шаге выше, условно вызывает хранимую процедуру, которая обрабатывает все запросы на копирование, сделанные одновременно SUBMIT
Кнопка формы выбрана.
КОММЕНТАРИИ. Если вы потратите достаточно времени на работу со встроенными мастерами в Oracle APEX, у вас появится возможность изучить новые шаблоны проектирования и процессы, совместимые с этим инструментом. Адаптация вашего подхода может уменьшить количество дополнительной работы и разочарования.