UTL_FILE 加载具有通配符扩展名的递归文件夹和文件
UTL_FILE to load recursive folders and files with wildcard extension
晚上好,
我要将本地路径中的 xls 文件加载到 oracle,但它们位于不同的文件夹中
在多年的文件夹中,在子文件夹中有几个文件。负载将是总的,
删除并重新加载。
但是我的文件夹结构有问题,我想知道 UTL_FILE 包是否可以完成我的工作。
文件夹的结构类似于:
人(目录)
-------->2020
-------->2021
------------>(文件)persona_0.xls
------------>(文件)persona_new.xls
我该怎么做:
1-遍历该文件夹结构的循环。
2-我如何使用通配符读取不同的文件 * person_ *
非常感谢,
感谢任何帮助或示例
你好。
UTL_FILE 仅适用于 DIRECTORY 对象,它们是指向数据库服务器上文件夹的预定义指针。您不能在文件名中使用通配符或遍历目录树。您不能使用 UTL_FILE 从客户端系统加载文件,除非(在某些情况下但不是全部)它们位于数据库可见的共享网络驱动器上。
来自文档:https://docs.oracle.com/database/121/ARPLS/u_file.htm#ARPLS069
Assuming the user has both READ and WRITE access to the directory
object USER_DIR, the user can open a file located in the operating
system directory described by USER_DIR, but not in subdirectories or
parent directories of this directory.
我过去看到的唯一处理方式是
- 将所有文件放在数据库服务器上的同一目录中
- 在数据库服务器 运行 上有一个 shell 脚本 OS 列出并循环遍历目录中的文件,然后 运行 一个 SQL 脚本与 SQL*Plus 调用存储过程,每个文件名作为输入。然后,存储过程将打开目录中的文件并获取数据。当存储过程和 SQL 脚本完成时,控制将 return 到 shell 脚本,该脚本将循环到列表中的下一个文件并重复。
或
- 如果所有文件都为同一目标提供数据 table 并且具有相同的记录结构,请将它们全部放在同一目录中并创建指向所有文件的外部 table文件一次。您仍然必须在外部 table 定义中明确命名每个文件 - 没有通配符。然后 运行 一个存储过程,用于一次对整个数据集执行任何摄取操作。
晚上好,
我要将本地路径中的 xls 文件加载到 oracle,但它们位于不同的文件夹中
在多年的文件夹中,在子文件夹中有几个文件。负载将是总的, 删除并重新加载。
但是我的文件夹结构有问题,我想知道 UTL_FILE 包是否可以完成我的工作。
文件夹的结构类似于:
人(目录)
-------->2020
-------->2021
------------>(文件)persona_0.xls
------------>(文件)persona_new.xls
我该怎么做:
1-遍历该文件夹结构的循环。
2-我如何使用通配符读取不同的文件 * person_ *
非常感谢,
感谢任何帮助或示例
你好。
UTL_FILE 仅适用于 DIRECTORY 对象,它们是指向数据库服务器上文件夹的预定义指针。您不能在文件名中使用通配符或遍历目录树。您不能使用 UTL_FILE 从客户端系统加载文件,除非(在某些情况下但不是全部)它们位于数据库可见的共享网络驱动器上。
来自文档:https://docs.oracle.com/database/121/ARPLS/u_file.htm#ARPLS069
Assuming the user has both READ and WRITE access to the directory object USER_DIR, the user can open a file located in the operating system directory described by USER_DIR, but not in subdirectories or parent directories of this directory.
我过去看到的唯一处理方式是
- 将所有文件放在数据库服务器上的同一目录中
- 在数据库服务器 运行 上有一个 shell 脚本 OS 列出并循环遍历目录中的文件,然后 运行 一个 SQL 脚本与 SQL*Plus 调用存储过程,每个文件名作为输入。然后,存储过程将打开目录中的文件并获取数据。当存储过程和 SQL 脚本完成时,控制将 return 到 shell 脚本,该脚本将循环到列表中的下一个文件并重复。
或
- 如果所有文件都为同一目标提供数据 table 并且具有相同的记录结构,请将它们全部放在同一目录中并创建指向所有文件的外部 table文件一次。您仍然必须在外部 table 定义中明确命名每个文件 - 没有通配符。然后 运行 一个存储过程,用于一次对整个数据集执行任何摄取操作。