Извлечение данных из имени файла и сохранение его в таблице с использованием хранимой процедуры - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть разные типы файлов (pdf, csv, doc, txt) в каталоге.

Название файлов выглядит примерно так:

John.Doe.19900101.TX.pdf         //FirstName.LastName.DOB.StateOfResidence  
Bruce.Banner.19700101.PA.doc     
Steve.Rodgers.19760101.AR.csv    
Tony.Stark.19901210.CA.txt      

Как написать хранимую процедуру в Oracle для чтения файлов в каталоге и извлечь FirstName, LastName, DOB, State и сохранить ее в таблице в соответствующих столбцах?

Пример: Для файла John.Doe.19900101.TX.pdf данные должны быть извлечены следующим образом:

John in FirstName column  
Doe in LastName column   
19900101 in DOB column  
TX in State column  
whole file in CLOB column

1 Ответ

0 голосов
/ 12 сентября 2018

Вам придется работать на уровне ОС, чтобы собрать имена файлов из каталога ОС. Учитывая, что вы пытаетесь получить информацию о вкусах Unix; Следующий URL поможет вам захватить список файлов в таблицу и даже в виде.

Код, который вам нужен:

--drop directory SCRIPT_TEMP_DIR;

CREATE DIRECTORY SCRIPT_TEMP_DIR AS '/home/oracle/oracle_scripts'
;
GRANT EXECUTE ON DIRECTORY SCRIPT_TEMP_DIR TO USER_NAME
;  -- Here USER_NAME will be your SCHEMA/USER NAME

drop table USER_NAME.home_directory purge;

CREATE TABLE USER_NAME.home_directory
(
 filerecord VARCHAR2(15),
 flink VARCHAR2(2),
 fowner VARCHAR2(6),
 fgroup VARCHAR2(8),
 fsize VARCHAR2(32),
 fdate_part1 VARCHAR2(16),
 fdate_part2 VARCHAR2(16),
 fdate_year_or_time VARCHAR2(16),
 fname VARCHAR2(255)
)
 ORGANIZATION EXTERNAL
 (
 TYPE ORACLE_LOADER
 DEFAULT DIRECTORY SCRIPT_TEMP_DIR
 ACCESS PARAMETERS
 (
 records delimited by newline
 preprocessor SCRIPT_TEMP_DIR:'listing.sh'
 fields terminated by whitespace
 (
 filerecord ,
 flink ,
 fowner ,
 fgroup ,
 fsize ,
 fdate_part1 ,
 fdate_part2 ,
 fdate_year_or_time ,
 fname 
 )
 )
 LOCATION ('listing.sh')
 )
REJECT LIMIT UNLIMITED;

Как только это будет сделано, вам просто нужно выбрать созданную выше таблицу.

SELECT *
  FROM USER_NAME.home_directory;

Позже вы можете применять функции substr / instr для разделения информации. Вы также можете использовать функцию регулярного выражения для получения необходимой информации.

SELECT fname, 
    regexp_substr(fname, '[^.]+', 1, 1) part1, 
    regexp_substr(fname, '[^.]+', 1, 2) part2,
    regexp_substr(fname, '[^.]+', 1, 3) part3
  FROM USER_NAME.home_directory;

И это дает вам:

enter image description here

Требуемый URL-адрес: здесь Код, вставленный выше, был изменен, когда вам нужно изменить также USER_NAME при предоставлении разрешений для каталога.

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