сценарий оболочки для поиска имени файла и количества строк каждого файла, теперь вставьте эту запись в таблицу Oracle - PullRequest
1 голос
/ 07 сентября 2010

Я должен найти имя файла, доступное в папке с каждым количеством строк файла.И тогда у меня будет вид двух столбцов данных.

Теперь мне нужно вставить эту запись в таблицу оракулов, содержащую два столбца (col1, col2).

Могу ли я написать сценарий оболочки, который будет выполнять оба варианта.

Я нашел здесь сам написать первую часть.т.е.

wc -l *| egrep -v " total$" | awk '{print $2 " " $1}' > output.txt

Теперь, как вставить данные output.txt в таблицу оракулов.

Ответы [ 4 ]

3 голосов
/ 08 сентября 2010

В версии 9i Oracle предоставил нам внешние таблицы .Эти объекты позволяют нам запрашивать данные в файлах ОС с помощью операторов SELECT.Это довольно круто.Что еще круче, в 11.0.1.7 мы можем связать скрипт оболочки с внешней таблицей, чтобы сгенерировать ее файл ОС.Прочтите статью Адриана Биллингтона о , в которой перечислены файлы с препроцессором внешней таблицы в 11g .Ваш сценарий оболочки является идеальным кандидатом на функциональность препроцессора.

Если вам нужно знать содержимое каталога сейчас, для какой-либо цели вы можете просто ВЫБРАТЬ из внешней таблицы.Если вы хотите вести постоянную запись имен файлов, вы можете ввести INSERT INTO ... SELECT * FROM external_table;.Этот оператор может быть выполнен автономно с использованием задания базы данных.

2 голосов
/ 08 сентября 2010

У вас есть два варианта.Оба я протестировал с этой структурой таблицы:

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нет.

0 голосов
/ 07 сентября 2010

Я не знаю Oracle, но похоже, что синтаксис SQL очень похож на MySQL.

По сути вы, вы бы сделали то, что сделали здесь, с одним незначительным изменением.

wc -l *| egrep -v " total$" | awk '{print $2 "|" $1}' > output.txt

Вы бы написали SQL-скрипт с именем thesql.sql, который бы выглядел следующим образом:

LOAD DATA
INFILE output.txt
INTO TABLE yourtable
FIELDS TERMINATED BY '|'
(col1, col2)

Затем, в вашем сценарии (это где я неясен), есть такая строка:

sqlplus <user>/<pw>@<db> @thesql.sql

Я нашел помощь от нескольких разных источников - здесь и здесь .

Надеюсь, это поможет!

0 голосов
/ 07 сентября 2010

Вы можете загрузить текстовые данные в Oracle с помощью инструмента командной строки SQL Loader. Здесь слишком много описаний о том, как использовать SQL Loader, начните с чтения этой веб-страницы:

http://www.orafaq.com/wiki/SQL*Loader_FAQ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...