Посмотрите, поможет ли это.
Процедура разбивает разделенные запятыми значения на строки и вставляет их в таблицу.
SQL> create or replace procedure remove_emp (par_empid in clob) is
2 begin
3 insert into my_temp_table (id)
4 select regexp_substr(par_empid, '[^,]+', 1, level)
5 from dual
6 connect by level <= regexp_count(par_empid, ',') + 1;
7 end;
8 /
Procedure created.
Тестирование:
SQL> begin
2 remove_emp('100X,101Y,102Z,103T,104G,105V,106C,107W,108Q');
3 end;
4 /
PL/SQL procedure successfully completed.
SQL> select * From my_temp_table;
ID
------------------------------
100X
101Y
102Z
103T
104G
105V
106C
107W
108Q
9 rows selected.
SQL>
Однако на вашем месте я бы полностью пропустил это. Поскольку у вас уже есть файл, содержащий строки данных, используйте
- SQL* Loader или
- функцию внешних таблиц или
- пакет UTL_FILE
до загрузить такие данные. Потому что сейчас вы должны
- преобразовать строки в значения, разделенные запятыми, а затем строку
- передать ее процедуре
- , разбившей эту строку на строки
- вставить их в таблицу
Много работы, большая часть которой зря.
Что касается предложенных мною "новых" вариантов, SQL* Загрузчик позволяет вам иметь исходный файл локально (на вашем P C), в то время как другие две опции требуют, чтобы файл находился на сервере базы данных. Какой бы вариант вы ни выбрали, он будет быстрее, чем вы делаете сейчас. Подумайте об этом.
SQL* Загрузчик пример:
Управляющий файл прост; Предполагается, что файл находится в моем каталоге c:\temp
и его имя data16.txt
.
load data
infile 'c:\temp\data16.txt'
replace
into table my_temp_table
(
id char(30)
)
Описание таблицы:
SQL> desc my_temp_table;
Name Null? Type
----------------------------------------- -------- ----------------------------
ID VARCHAR2(30)
Сеанс загрузки:
c:\Temp>sqlldr scott/tiger control=test16.ctl log=test16.log
SQL*Loader: Release 11.2.0.2.0 - Production on Pon Tra 6 12:44:34 2020
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Commit point reached - logical record count 8
Commit point reached - logical record count 9
Результат:
c:\Temp>sqlplus scott/tiger
SQL*Plus: Release 11.2.0.2.0 Production on Pon Tra 6 12:44:42 2020
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
SQL> select * From my_temp_table;
ID
------------------------------
100X
101Y
102Z
103T
104G
105V
106C
107W
108Q
9 rows selected.
SQL>