从sql文件导入数据到Oracle使用sql

问题描述:

我正在使用Oracle 10g SQL Developer 我想知道是否有任何方法可以从CSV文件导入数据,这些数据由','和行分隔通过使用SQL查询 “\ n”我想这个查询从sql文件导入数据到Oracle使用sql

LOAD DATA INFILE 'C:/tmp.csv' INTO TABLE CSVTEST2 FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 lines (ID,FIRSTNAME,LASTNAME,BIRTHDATE);

但它没有工作,我总是从SQL开发人员得到错误信息,告诉我UNKNOW命令

您需要使用SQLLDR工具,以加载数据。首先根据您的要求创建一个控制文件(以.ctl的扩展名结尾),如下所述。

load data 
infile 'path_where_file_is_placed_followed_by_file_name' 
into table table_name_where_you_want_to_insert_the_data_of_csv_file 
fields terminated by ',' lines terminated by '\n' 
(
field1 datatype, 
field2 datatype, 
field3 datatype 
) 

现在执行sqlldr实用程序来加载数据,如下所述。

sqlldr userid=database_username/[email protected]_name control=path_where_control_file_is_placed_followed_by_control_file_name LOG=path_for_log_file BAD=path_for_bad_records Discard=path_for_discard_records 
+0

非常感谢你的回答,我已经解决了我的问题,我做了同样的事情,当你为正确答案+1时 –

您应该使用Oracle SQL Loader为此,不是 SQLPLUS或SQL开发

或者您可以使用external tables

-- this command must be executed on the Oracle server machine, NOT on the client: 
create directory ext_tab_dir as '/path/to/dir/where/you/will/put/your/csv/files'; 

CREATE TABLE emp_load (
    employee_number   CHAR(5), 
    employee_last_name  CHAR(20), 
    employee_first_name  CHAR(15), 
    employee_middle_name CHAR(15) 
) 
ORGANIZATION EXTERNAL (
    TYPE ORACLE_LOADER 
    DEFAULT DIRECTORY ext_tab_dir 
    ACCESS PARAMETERS (RECORDS FIXED 62 
     FIELDS (
      employee_number CHAR(2), 
      employee_dob CHAR(20), 
      employee_last_name CHAR(18), 
      employee_first_name CHAR(11), 
      employee_middle_name CHAR(11) 
     ) 
    ) 
    LOCATION ('tmp.csv')); 
+0

你能解释一下关于使用SQL * Loader的更多信息吗,我只想用查询?命令** LOAD DATA INFILE **不起作用? –

+0

@Mahran,没有像“LOAD DATA ...”这样的sql命令 - 它是SQL Loader工具的指令。所以它可能只能用于SQL Loader。但是你可以使用外部表格作为替代 - 我会用一个例子更新我的答案 – MaxU

在Windows 10例和甲骨文12C

,如果你有一个用逗号分隔的每个表的记录的文本文件,你可以这样做:

为每个控制文件表,称为table_name.ctl(C:\用户\用户\桌面\目录\ table_name.ctl)

load data 
infile 'C:\Users\user\Desktop\directory\table_name.txt' 
append 
into table table_name 
fields terminated by "," 
(id, field2,field3) 

后,在窗口应该打开Cmd并在每个表中加载数据,然后例如在aws服务器中远程加载数据。

sqlldr [email protected]_PDB1/password 
control='C:\Users\user\Desktop\directory\table_name.ctl' log='C:\Users\user\Desktop\directory\table_name.log' 

sqlldr control='C:\Users\user\Desktop\directory\table_name.ctl' log='C:\Users\user\Desktop\directory\table_name.log' 
and then ask them the user and password 

如果你有以下错误:“程序无法启动,因为oranfsodm12.dll从计算机中缺少。尝试重新安装程序来解决这个问题“

这是因为SQL * Loader的 被禁用,并且不能在控制台窗口中使用,这是解决 使下面的步骤(如http://www.dallasmarks.com/installing-two-oracle-12c-clients-on-one-server/):

  1. 应到文件夹 C:\ ORACLE \客户端\用户\产品\ 12.1.0 \ Client_1与\ BIN

  2. 制作oraodm12.dll文件的副本,称新的文件 oranfsodm12.dll ,和过去在同一个BIN文件夹中。

  3. 从cmd再次运行该命令。