6

我对数据库和编程很陌生。我不太擅长计算机术语,所以坚持我。我有一个csv文件正在尝试加载到我的Oracle数据库中。它包含我已安装的帐户信息,例如姓名、电话号码、服务日期等Oracle 11g Release 2。这是我到目前为止一步一步做的。

1) 运行 SQL 加载器

我用我需要的列创建了一个新表。例如

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)

有什么想法吗?

4

9 回答 9

4

Sqlldr 想在控制文件所在的同一目录中写入一个日志文件。但显然不能。它可能没有所需的权限。

如果您使用的是 Linux 或 Unix,请尝试以与运行 sqldr 相同的方式运行以下命令:

touch Billing.log

它会显示你是否有权限。

更新

正确的命令行是:

sqlldr myusername/mypassword control=Billing.ctl
于 2012-05-31T20:01:54.470 回答
2

我有一个名为 FAR_T_SNSA.csv 的 csv 文件,我想直接将其导入 oracle 数据库。为此,我已经完成了以下步骤,并且效果非常好。以下是您需要遵循的步骤:

如何在 ORACLE 数据库中导入 CSV 文件?

  1. 获取一个 .csv 格式的文件,该文件将被导入到 oracle 数据库中。这里命名为“FAR_T_SNSA.csv”</li>
  2. 在 sql 中创建一个与 .csv 文件具有相同列名的表。创建表计费 (iocl_id char(10), iocl_consumer_id char(10));

  3. 创建一个包含 sql*loder 脚本的控制文件。在记事本中键入如下脚本并将其保存为 .ctl 扩展名,选择文件类型为所有类型(*)。这里控制文件被命名为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
    )
    
  4. 现在在命令提示符下运行命令:

    Sqlldr UserId/Password
    Control = “ControlFileName” 
    --------------------------------
    Here ControlFileName is Billing.
    
于 2012-12-18T09:50:57.117 回答
1

尝试这个

将文件中的数据“数据文件位置”加载到表模式中。表名字段以“,”结尾,可选地用“|”括起来 (字段 1、字段 2、字段 3....)

在命令提示符下:

sqlldr system@databasename/password control='control file location'
于 2014-04-04T08:23:48.710 回答
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

于 2013-04-11T15:53:21.453 回答
1

您可以使用以下控制文件并确保允许 sql*loader 在同一目录中写入两个文件(results.log 和错误文件)所需的权限。

options  ( 
skip=1,
PARALLEL=true,
DIRECT=true,
MULTITHREADING=false
)
load data
infile              'dataset.csv'           
APPEND INTO TABLE   XX_DUMMY_DATA_CSV
FIELDS TERMINATED BY ","       
optionally enclosed by '"' 
( 
   CASE_NUMBER,
   NASA_CENTER,
   SRA_DATE DATE "mm/dd/YYYY HH24:MI",
   SRA_FINAL,
   NTR_TITLE
)

来源:使用 SQL*Loader 将数据从 CSV 文件导入到 oracle 数据库表

于 2022-02-22T13:17:23.777 回答
0

-- 第一步:创建临时表。创建表计费 (TAP_ID char(10), ACCT_NUM char(10));

SELECT * FROM BILLING;

-- 第二步:创建控制文件。

将文件 IN_DATA.txt 中的数据加载到以“,”结尾的表帐单字段(TAP_ID,ACCT_NUM)

-- 第三步:创建输入数据文件。IN_DATA.txt 文件内容:100,15678966

-- 第 4 步:从运行中执行命令:..client\bin>sqlldr username@db-sis__id/password control='Billing.ctl'

于 2015-03-31T17:30:01.967 回答
0

如果你的文字是:乔说,“弗雷德和他的“妻子”在这里。
这在 CSV 中保存为:
“乔说,”“弗雷德和他的“妻子”“”“在这里。”
(规则是双引号环绕整个字段,双引号转换为两个双引号)。因此,需要一个简单的 Optionally Enclosed By 子句,但还不够。由于这条规则,CSV 很难。您有时可以在该字段的加载器中使用 Replace 子句,但根据您的数据,这可能还不够。通常需要对 CSV 进行预处理才能加载到 Oracle 中。或者将其保存为 XLS 并使用 Oracle SQL Developer 应用程序导入到表中 - 非常适合一次性工作,但不适合编写脚本。

于 2013-05-30T20:22:06.643 回答
0

“第 1 行” - 也许是关于 windows 与 unix 换行符的东西?(正如我看到上面提到的 Windows 7)。

于 2012-06-01T12:31:40.510 回答
0

将数据输入文件“D:\CertificationInputFile.csv”加载到表 CERT_EXCLUSION_LIST 字段中以“|”终止 可选地由 '"' 封闭(证书名称,证书版本)

于 2014-02-03T16:45:30.450 回答