如何使用 unix scripting/plsql 将文本文件导入 sql 表
Posted
技术标签:
【中文标题】如何使用 unix scripting/plsql 将文本文件导入 sql 表【英文标题】:How to import txt file to sql tabl using unix scripting/plsql 【发布时间】:2021-12-31 17:53:48 【问题描述】:我有一个输入文件:$home/dir/subdir/input.txt
input.txt 的内容:
123,0000,11111,3,1,X
124,0001,11112,3,1,Y
125,0002,,4,2,Y
129,0003,11114,4,2,X
如何使用输入文件将它们插入到使用 unix 脚本/plsql 的 sql 表中?
col1 | col2 | col3 | col4 | col5 | col6 |
---|---|---|---|---|---|
123 | 0000 | 11111 | 3 | 1 | X |
124 | 0001 | 11112 | 3 | 1 | Y |
125 | 0002 | 4 | 2 | Y | |
129 | 0003 | 11114 | 4 | 2 | X |
【问题讨论】:
【参考方案1】:使用 unix 脚本/plsql?
Oracle 提供了几种方法来做到这一点。
其中之一是使用SQL Loader。它的好处是您可以在自己的 PC 上做所有事情(即源文件可以驻留在您自己的计算机上)。它运行得非常非常快。
另一个是外部表格功能。它使您可以像访问普通 Oracle 数据库表一样访问源文件,即您可以编写 SELECT
语句从文件中获取数据并将这些行插入到目标表中。它的缺点是您必须创建一个 directory,Oracle 对象指向通常位于数据库服务器上的文件系统目录,因此 - 如果您不是 DBA - 您必须与某人交谈以创建目录并让您访问它(即授予所需的权限)。
另一个选项 - 正如您所说的,PL/SQL,是使用UTL_FILE
包。您将创建一个 PL/SQL 脚本来打开文件,逐行读取它并将行插入到目标表中。与上一个选项类似,必须有一个您有权访问的目录。
截至 Unix 脚本,我不确定您的意思是什么。 Unix是操作系统,它不会将行插入数据库。如果您的意思是说您将创建一个脚本,然后调用另一个 - 数据库 - 脚本来实际完成这项工作,这是可能的(例如,您将调用 sqlldr
可执行文件)。
因此,这仅取决于您可以访问什么,是否可以(或不能)访问数据库服务器的目录。我不会编写任何代码(涵盖所有这些选项将花费太多时间),但如果您选择哪种方式,我可以提供帮助(除了 Unix 部分;我不使用它)。
【讨论】:
以上是关于如何使用 unix scripting/plsql 将文本文件导入 sql 表的主要内容,如果未能解决你的问题,请参考以下文章
如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)?