Đây là một ví dụ cho thấy cách thực hiện điều đó. Mã của tôi hơi khác với mã của bạn vì tên thư mục và tệp tin khác nhau.
Bảng mẫu, sẽ chứa dữ liệu được lưu trữ trong tệp:
SQL> create table test2 (id number, fname varchar2(20), lname varchar2(20));
Table created.
Mã số; phần thú vị là dòng 14 và cách chia toàn bộ hàng thành các giá trị riêng biệt:
SQL> declare
2 l_file utl_file.file_type;
3 l_text varchar2(32767);
4 l_cnt number;
5 begin
6 -- Open file.
7 l_file := utl_file.fopen('EXT_DIR', 'test2.txt', 'R', 32767);
8
9 loop
10 utl_file.get_line(l_file, l_text, 32767);
11
12 -- L_TEXT contains the whole row; split it (by commas) into 3 values
13 -- and insert them into the TEST2 table
14 insert into test2 (id, fname, lname)
15 values (regexp_substr(l_text, '[^,]+', 1, 1),
16 regexp_substr(l_text, '[^,]+', 1, 2),
17 regexp_substr(l_text, '[^,]+', 1, 3)
18 );
19 end loop;
20
21 utl_file.fclose(l_file);
22 exception
23 when no_data_found then
24 null;
25 end;
26 /
PL/SQL procedure successfully completed.
Kết quả:
SQL> select * from test2;
ID FNAME LNAME
---------- -------------------- --------------------
100 Steven King
101 Neena Kochha
102 Lex De Haan
103 Alexander
104 Bruce Ernst
SQL>