У вас есть два варианта.Оба я протестировал с этой структурой таблицы:
SQL> create table tbl_files(fileName varchar(20), lineCount number);
Первый выбор - это сценарий создания сценария SQL с командами создания вставки SQL и запуск утилиты командной строки sqlplus.Я немного изменил ваш сценарий оболочки:
wc -l *| egrep -v " total$" | awk '{q=sprintf("%c", 39); print "INSERT INTO TBL_FILES(fileName, lineCount) VALUES (" q$2q ", " $1 ");";}' > sqlplusfile.sql
После запуска этот файл сценария "sqlplusfile.sql" имеет следующее содержимое:
INSERT INTO TBL_FILES(fileName, lineCount) VALUES ('File1.txt', 10);
INSERT INTO TBL_FILES(fileName, lineCount) VALUES ('File2.txt', 20);
INSERT INTO TBL_FILES(fileName, lineCount) VALUES ('File3.txt', 30);
Теперь вы можете напрямую запустить команду sqlplus с этим файломв параметре:
sqlplus username/password@oracle_database @sqlplusfile.sql
После запуска этого скрипта таблица будет выглядеть следующим образом:
SQL> select * from tbl_files;
FILENAME LINECOUNT
-------------------- ----------
File1.txt 10
File2.txt 20
File3.txt 30
Примечание: в конце файла "sqlplusfile.sql" должен присутствовать "commit;"в противном случае вы не увидите данные в таблице.
Второй вариант - использовать инструмент командной строки sqlldr (этот инструмент является частью установки Oracle Client)
Опять же, немного изменил ваш скрипт:
wc -l *| egrep -v " total$" | awk '{print "\""$2"\"" "," $1}' > data.txt
Содержимое файла "data.txt" выглядит так:
"File1.txt",10
"File2.txt",20
"File3.txt",30
В этом же каталоге я создал файл "settings.ctl""с таким содержимым:
LOAD DATA
INFILE data.txt
INSERT
INTO TABLE TBL_FILES
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
(fileName, lineCount)
Теперь вы можете запустить эту команду, которая загружает данные в базу данных:
sqlldr userid=user/passwd@oracle_database control=settings.ctl
Утилита sqlldr - лучший выбор, но в некоторых случаях установка Oracle Clientнет.