Вот вариант (PL /) SQL, который вы можете рассмотреть.
Для целей тестирования я создал таблицу TEST
, которая будет содержать пары ID
- VALUE
. Процедура принимает два параметра, оба являются строками:
ID
будет общим для всех значений
VALUE
- список значений через запятую. Несмотря на то, что вы можете передать коллекцию, я бы посоветовал вам использовать VARCHAR2, так как ее очень просто поддерживать
SELECT
внутри процедуры использует иерархический запрос с регулярными выражениями; его цель состоит в том, чтобы разбить строку значений, разделенных запятыми, на строки, чтобы вы могли вставить каждое значение в его собственную строку. При этом вам даже не понадобится петля. Кроме того, SELECT
будет работать, даже если вы запустите его standalone , но - вам нужна процедура.
Хорошо, вот так:
SQL> create table test (id varchar2(10), value varchar2(20));
Table created.
SQL> create or replace procedure p_ins (par_id in varchar2,
2 par_value in varchar2)
3 is
4 begin
5 insert into test (id, value)
6 select par_id,
7 trim(regexp_substr(par_value, '[^,]+', 1, level))
8 from dual
9 connect by level <= regexp_count(par_value, ',') + 1;
10 end;
11 /
Procedure created.
Тестирование:
SQL> begin
2 p_ins('A', 'The, quick, brown fox, runs, or, whatever, it does');
3 end;
4 /
PL/SQL procedure successfully completed.
SQL> select * from test;
ID VALUE
---------- --------------------
A The
A quick
A brown fox
A runs
A or
A whatever
A it does
7 rows selected.