我对数据库和编程很陌生。我对电脑术语不是很了解所以坚持下去。我有一个csv
文件,我正在尝试加载到我的Oracle
数据库中。它包含帐户信息,如姓名,电话号码,服务日期等。我已安装Oracle 11g Release 2
。这就是我到目前为止所做的一步一步......
1)Ran SQL Loader
我创建了一个包含我需要的列的新表。例如
create table Billing ( TAP_ID char(10), ACCT_NUM char(10), MR_ID char(10), HOUSE_NUM char(10), STREET char(30), NAME char(50)
2)它促使我创建了表。接下来,我为记事本中的数据创建了一个控制文件,该文件与我的Billing表位于同一目录中,并具有.ctl扩展名。 GIS.csv是我从中获取数据的文件,也在同一目录中,并将其命名为Billing.ctl,看起来像这样。
load data
infile GIS.csv
into table Billing
fields terminated by ','
(TAP_ID, ACCT_NUM, MR_ID, HOUSE_NUM, STREET, NAME)
3)从命令行运行sqlldr以使用控制文件
sqlldr myusername/mypassword Billing.ctl
这是我被困的地方。我看过我正在做的视频教程,但是我收到了这个错误:
SQL*Loader-522: lfiopn failed for file (Billing.log)
关于我在这里做错了什么的任何想法?
更新
我只是将文件移动到一个单独的目录中,我想我已经超过了之前的错误。 顺便说一句,是的Billing.ctl和GIS.csv在同一目录中。
但现在又出现了另一个错误:
'SQL*Loader-350: Syntax error at line 1.
期待关键字LOAD,找到“SERV TAP ID”。 “SERV TAP ID”,“ACCT NUMBER”,“MTR ID”,“SERV HOUSE”,“SERV STREET”,“SERV ^'
我不明白为什么会出现这个错误。我的billing.ctl有一个负载。
LOAD data
infile GIS.csv
into table Billing
fields terminated by ','
(TAP_ID, ACCT_NUM, MTR_ID, SERV_HOUSE, SERV_STREET, SERV_TOWN, BIL_NAME, MTR_DATE_SET, BIL_PHONE, MTR_SIZE, BILL_CYCLE, MTR_RMT_ID)
有什么想法吗?
答案 0 :(得分:4)
Sqlldr想要在控制文件所在的同一目录中写入日志文件。但显然它不能。它可能没有所需的权限。
如果您使用的是Linux或Unix,请尝试以与运行sqldr相同的方式运行以下命令:
touch Billing.log
它将显示您是否拥有权限。
<强>更新强>
正确的命令行是:
sqlldr myusername/mypassword control=Billing.ctl
答案 1 :(得分:2)
我需要一个名为FAR_T_SNSA.csv的csv文件,我想直接在oracle数据库中导入。为此我已经完成了以下步骤,它的工作非常好。以下是您要遵循的步骤:
如何在ORACLE数据库中导入CSV文件?
在sql中创建一个表,其列名与.csv文件中的列名相同。 create table Billing(iocl_id char(10),iocl_consumer_id char(10));
创建一个包含sql * loder脚本的控制文件。 在记事本中键入如下脚本,并使用.ctl扩展名保存此选项,将文件类型选为All Types(*)。这里控制文件被命名为Billing。脚本如下:
LOAD DATA
INFILE 'D:FAR_T_SNSA.csv'
INSERT INTO TABLE Billing
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
iocl_id,
iocl_consumer_id
)
现在在命令提示符下运行命令:
Sqlldr UserId/Password
Control = “ControlFileName”
--------------------------------
Here ControlFileName is Billing.
答案 2 :(得分:1)
调用sql loader时需要指定日志文件名。
sqlldr myusername/mypassword control=Billing.ctl log=Billing.log
当我从python中调用sql loader时,我遇到了这个问题。以下文章捕获了在调用sql loader http://docs.oracle.com/cd/A97630_01/server.920/a96652/ch04.htm
时可以指定的所有参数答案 3 :(得分:1)
试试这个
加载数据infile&#39;数据文件位置&#39;表格schema.tablename字段由&#39;,&#39;终止可选地包含在&#39; |&#39; (FIELD1,FIELD2,字段3 ....)
在命令提示符中:
sqlldr system@databasename/password control='control file location'
答案 4 :(得分:0)
“第1行” - 也许关于Windows vs unix换行符的内容? (正如我看到上面提到的Windows 7)。
答案 5 :(得分:0)
如果您的文字是:
乔说,“弗雷德在这里与他的”妻子“”。
它以CSV格式保存为:
“乔说,”“弗雷德在这里与他的”妻子“”“”。“
(规则是双引号围绕整个字段,双引号转换为两个双引号)。因此需要一个简单的Optional Enclosed By子句,但这还不够。由于这个规则,CSV很难实现。有时您可以在加载器中为该字段使用Replace子句,但根据您的数据,这可能还不够。通常需要预处理CSV才能在Oracle中加载。或者将其保存为XLS并使用Oracle SQL Developer应用程序导入到表中 - 非常适合一次性工作,不太适合编写脚本。
答案 6 :(得分:0)
负载数据 INFILE'D:\ CertificationInputFile.csv' INTO TABLE CERT_EXCLUSION_LIST 字段被“|”终止选择性地封闭''' (CERTIFICATIONNAME,CERTIFICATIONVERSION)
答案 7 :(得分:0)
- 步骤1:创建临时表。 create table Billing(TAP_ID char(10),ACCT_NUM char(10));
SELECT * FROM BILLING;
- 步骤2:创建控制文件。
加载数据 infile IN_DATA.txt 进入表格账单 字段由&#39;,&#39;终止 (TAP_ID,ACCT_NUM)
- 步骤3:创建输入数据文件。 IN_DATA.txt文件内容: 100,15678966
- 步骤4:执行命令: .. client \ bin&gt; sqlldr username @ db-sis__id / password control =&#39; Billing.ctl&#39;