0

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

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

+------------+------------------------------------------+
| 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 |
+------------+------------------------------------------+

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

问题:

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

如果我可以从网络中获取文件列表到数据库表中,那么我可以轻松查询错误。

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

  • 网络驱动器上大约有 60,000 个文件,位于各种子文件夹中
  • 这些文件与 Oracle 数据库不存在于同一台服务器上(我不是 IT 人员,所以我对这类事情一无所知)。但是,我确实在运行查询的计算机上的 Windows 资源管理器中映射了驱动器。
  • 这个 QC 操作大约每月运行一次。
  • 性能不是一个大问题。文件列表不需要是“实时的”,尽管这肯定是一个加号。
  • 我可以想到使用 MS Office 或类似工具中的 VBA 脚本的快速而肮脏的方法。但是,我想到可能有更专业或开箱即用的方法来做到这一点(也许使用内置的 Oracle 功能)。

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

4

1 回答 1

1

1)在(比如说)C:\TEMP 中创建一个名为 dirlist.bat 的批处理文件

@echo off
dir /s /b X:\Records_System

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

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' 是任何现有文件

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

于 2018-01-10T04:22:32.077 回答