Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SQL高效地插入大量数据_Sql_Oracle_Excel_File Upload_Plsql - Fatal编程技术网

使用SQL高效地插入大量数据

使用SQL高效地插入大量数据,sql,oracle,excel,file-upload,plsql,Sql,Oracle,Excel,File Upload,Plsql,嗨,我经常需要在表中插入大量数据。例如,我可以从excel或文本文件中以 1,a 3,bsdf 4,sdkfj 5,something 129,else 然后,在本例中,我经常构造6条insert语句并运行SQL脚本。我发现,当我必须向服务器发送数千个小程序包时,速度很慢,这也会给网络带来额外的开销 你最好的方法是什么 更新:我正在使用ORACLE 10g。有很多方法可以加快速度 1) 在一次交易中完成。这将通过避免打开/关闭连接来加快速度 2) 直接作为CSV文件加载。如果将数据作为CSV文

嗨,我经常需要在表中插入大量数据。例如,我可以从excel或文本文件中以

1,a
3,bsdf
4,sdkfj
5,something
129,else
然后,在本例中,我经常构造6条insert语句并运行SQL脚本。我发现,当我必须向服务器发送数千个小程序包时,速度很慢,这也会给网络带来额外的开销

你最好的方法是什么


更新:我正在使用ORACLE 10g。

有很多方法可以加快速度

1) 在一次交易中完成。这将通过避免打开/关闭连接来加快速度

2) 直接作为CSV文件加载。如果将数据作为CSV文件加载,则根本不需要“SQL”语句。在MySQL中,“加载数据填充”操作非常直观和简单地实现了这一点

3) 您还可以简单地将整个文件作为文本转储到名为“raw”的表中。然后让数据库使用触发器自行解析数据。这是一种黑客行为,但它会简化应用程序代码并减少网络使用

使用

另见例如

这是一个简单的例子,应该让您开始学习

您需要位于服务器目录中的文件(熟悉以下内容):

创建外部表:

create table so13t (
  id number(4),
  data varchar2(20)
)
organization external (
  type oracle_loader
  default directory jtest /* jtest is an existing directory object */
  access parameters (
    records delimited by newline
    fields terminated by ','
    missing field values are null
  )
  location ('exttable-1.csv') /* the file located in jtest directory */
)
reject limit unlimited;
现在,您可以使用SQL的所有功能访问数据:

SQL> select * from so13t order by data;

        ID DATA
---------- ------------------------------------------------------------
         1 a
         3 bsdf
       129 else
         4 sdkfj
         5 something

我不确定这是否适用于Oracle,但在SQL Server中,您可以使用批量插入SQL语句从txt或csv文件上载数据

BULK
INSERT [TableName]
FROM 'c:\FileName.txt'
WITH 
(
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n'
)
GO
只需确保表列与txt文件中的内容正确匹配即可。对于更复杂的解决方案,您可能希望使用格式文件,请参见以下内容:

您只需构造一条SQL insert语句,将所有这些行作为值(),()项包含在内。使用外部表从外部表读取文本文件或csv和大容量插入。@EJP:Oracle不接受这种语法。可能与EJP重复,您能给我举个例子吗?很好的手册
BULK
INSERT [TableName]
FROM 'c:\FileName.txt'
WITH 
(
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n'
)
GO