质量控制:根据 table 中的文件名检查文件夹中的文件名

Quality Control: Check file names in a folder against filenames in a table

我在 Oracle 数据库中有一个记录系统。记录系统用于检索pdf、jpeg、视频文件等

设计非常简单:有一个名为 infrastructure_records 的 table,其中有一列包含指向文件的超链接:

+------------+------------------------------------------+
| project_id |                file_path                 |
+------------+------------------------------------------+
| Project 1  | X:\Records_System\Folder A\Project 1.pdf |
| Project 2  | X:\Records_System\Folder B\Project 2.jpg |
| Project 3  | X:\Records_System\Folder C\Project 3.mpg |
+------------+------------------------------------------+

我们使用前端从文件路径创建可点击的超链接。使用超链接,用户可以导航到文件。

问题:

我想根据数据库中的文件列表检查网络驱动器上的文件 table。

如果我可以从网络中获取文件列表并存入数据库 table,那么我就可以很容易地查询错误。

但是,我不确定在 Oracle table 中创建文件列表的最佳方法是什么。

如何优雅地将网络驱动器上的文件列表插入 Oracle table?

1) 在(比如)C:\TEMP 中创建一个名为 dirlist.bat

的批处理文件
@echo off
dir /s /b X:\Records_System

2) 创建一个将使用该文件进行预处理的外部 table

CREATE TABLE dir_listing
( file_name VARCHAR2(255)  )
ORGANIZATION EXTERNAL
(
  TYPE ORACLE_LOADER
  DEFAULT DIRECTORY temp
  ACCESS PARAMETERS
  (
    RECORDS DELIMITED BY NEWLINE
    PREPROCESSOR temp: 'dirlist.bat'
    FIELDS TERMINATED BY WHITESPACE
   )
  LOCATION ('dummy_file.txt')
  )
REJECT LIMIT UNLIMITED;

其中 'temp' 是一个 oracle 目录

create directory temp as 'c:\temp';
grant read, write, execute on directory temp to ...

和'dummy_file.txt'是任何现有文件

现在,您只需像查询其他 table 一样查询 table dir_listing 即可获取文件列表