Oracle SQL:从大型文本文件运行插入语句

Posted

技术标签:

【中文标题】Oracle SQL:从大型文本文件运行插入语句【英文标题】:Oracle SQL: Running insert statements from a large text file 【发布时间】:2021-01-26 19:46:11 【问题描述】:

我有一个大文本文件(大约 50mb)。这个文本文件有数千个插入语句。我试图在 Oracle SQL Developer 中打开文本文件,但它太大了。如何在不使用 SQL Developer 打开文件的情况下将数据插入到我的表中?

我尝试逐个循环插入语句并将它们插入到我的表中,如下所示:

DECLARE 
V1 VARCHAR2(32767);
  fileVariable UTL_FILE.FILE_TYPE; 
BEGIN
  fileVariable := UTL_FILE.FOPEN('h:/Documents',
                                         'clob_export.sql',
                                         'R',
                                         32760);
 UTL_FILE.GET_LINE(fileVariable,V1,32767); 
 UTL_FILE.FCLOSE(fileVariable); 
END;

但这似乎不起作用。我无法在机器上创建目录,无论如何,文本文件在我运行 SQL Developer 的计算机上,并且 SQL Developer 远程连接到数据库。

【问题讨论】:

【参考方案1】:

从我的角度来看,最简单的方法是从 SQL*Plus 运行它,例如:

c:\Temp>sqlplus scott/tiger

SQL*Plus: Release 11.2.0.2.0 Production on Uto Sij 26 22:20:18 2021

Copyright (c) 1982, 2014, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

SQL> @insert_data.sql

1 row created.


1 row created.

<snip>

假设 insert_data.sql 包含类似的东西

insert into dept values (1, 'Dept 1', 'NY');
insert into dept values (2, 'Dept 2', 'London');
...

【讨论】:

【参考方案2】:

使用 sqlplus,如果文本过多,则使用选项仅登录文件而不是屏幕

 SET TERMOUT OFF; 

 spool M:\Documents\test.log;

【讨论】:

【参考方案3】:

使用@ 调用文件,而不是尝试打开文件。您可能还想禁用反馈以避免成千上万的“插入 1 行”消息。

set feedback off;
@c:\users\jon\Desktop\test.sql

上述命令是 SQL*Plus 语法,但 Oracle SQL Developer 工作表理解基本的 SQL*Plus 命令。如果您需要经常运行大型脚本,那么您可能想学习命令行 SQL*Plus,但如果这只是一次性任务,那么请坚持使用 SQL Developer。

【讨论】:

以上是关于Oracle SQL:从大型文本文件运行插入语句的主要内容,如果未能解决你的问题,请参考以下文章

oracle用sql语句插入数据,为啥老是显示正在运行

SQL(SQL/Oracle)使用序列从选择语句中插入值

如何提高大型文本文件的数据加载性能[重复]

是否有从结果集中构建插入语句的 Oracle SQL 工具?

用source语句导入sql文件时中文乱码如何解决

读取文本文件以将数据插入 Oracle SQL 表