Извлечение значений из разделенного двоеточием varchar, а затем цикл для вставки данных в базу данных

Я загружаю данные в базу данных из формы в Oracle Apex. Форма загружает данные для одного отдела (11 строк с процессом PL/SQL), но я хочу дублировать данные для нескольких отделов, используя список выбора нескольких элементов.

Список выбора возвращает varchar2, разделенный двоеточием. (ИЕ 856:456:455:455) Эти числа представляют собой идентификатор отдела, который будет единственным изменением в каждой загруженной записи, все остальные строки будут дублироваться.

Я думаю, мне нужно разделить varchar2 по двоеточию на массив, а затем прокрутить массив, чтобы загрузить каждый в базу данных вместе с другими 10 столбцами, которые не изменятся.

Я пробовал несколько методов разделения для преобразования значений, разделенных двоеточиями, в значения, разделенные запятыми, но ничего не сработало. Не удалось найти метод строки для массива в Pl/SQL. Я предполагаю, что это будет немного сложнее, чем это.

l_input varchar2(4000) := :P4_ADDITIONAL_LE ||':'|| :P4_LEGAL_ENTITY_ID;

Это единственный код, который у меня есть, который добавляет начальный отдел к дополнительным отделам. выбирается из списка выбора. Я загрузил это в тестовую таблицу, и она выводит 861:842:882:844:843. Я хочу, чтобы каждое из этих значений было доступно для отдельной загрузки с использованием цикла for в процессе PL/SQL.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
1 087
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Есть много способов разделить такие строки, вот пример с xmltable, где я помещаю элементы в коллекцию и перебираю ее:

declare 
  type tbl_var is table of varchar2(5);
  v_deps tbl_var;
  v_str varchar2(100) := '861:842:882:844:843';
begin 
  select trim(column_value) text
    bulk collect into v_deps
    from xmltable(('"' || replace(v_str, ':', '","') || '"'));

  for i in 1..v_deps.count loop
    dbms_output.put_line(v_deps(i));
  end loop;
end;

Выход:

861
842
882
844
843

Другой метод использует регулярное выражение, которое можно комбинировать с другими упомянутыми столбцами, чтобы завершить весь процесс в 1 операторе SQL:

Insert into table_name(dept_no,col1,col2,col3)
with source as (select '861:842:882:844:843' str, 'aaa' colA, 'bbb' colB, 'ccc' colC from dual)
select regexp_substr(str,'[^:]+', 1, level) dept_id ,colA, colB, colC from source
     connect by regexp_substr(str, '[^:]+', 1, level) is not null;

Для этого вы можете использовать API APEX_STRING.SPLIT. Он доступен в Apex 5.1.

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