web-dev-qa-db-ja.com

OracleでSQLローダーを使用してCSVファイルをインポートする

私はデータベースとプログラミングにかなり新しいです。私はコンピュータの専門用語があまり得意ではないので、我慢してください。 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)テーブルが作成されたことがわかりました。次に、メモ帳でデータの制御ファイルを作成しました。これは、請求テーブルと同じディレクトリにあり、拡張子は.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)

ここで私が間違っている可能性があることについてのアイデアはありますか?

更新

ファイルを別のディレクトリに移動しただけで、前のエラーを乗り越えたと思います。ちなみに、yes 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)

何かご意見は?

5
Mark Nelson

Sqlldrは、制御ファイルと同じディレクトリにログファイルを書き込みたいと考えています。しかし、明らかにできません。おそらく必要な権限がありません。

LinuxまたはUnixを使用している場合は、sqldrを実行するのと同じ方法で次のコマンドを実行してください。

touch Billing.log

権限があるかどうかが表示されます。

更新

適切なコマンドラインは次のとおりです。

sqlldr myusername/mypassword control=Billing.ctl
4
Codo

Oracleデータベースに直接インポートしたいFAR_T_SNSA.csvという名前のcsvファイルがありました。このために私は次の手順を実行しましたが、それは完全にうまくいきました。以下は、u vandが従うステップです。

OracleデータベースにCSVファイルをインポートする方法

  1. Oracleデータベースにインポートされる.csv形式のファイルを取得します。これは「FAR_T_SNSA.csv」という名前です
  2. .csvファイルと同じ列名でSQLにテーブルを作成します。テーブルBilling(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.
    
2
Piyush Mehtani

これを試して

データファイル 'datafile location'をテーブルschema.tablenameにロードします。 '、'で終了するフィールドは、オプションで '|'で囲みます。 (フィールド1、フィールド2、フィールド3 ...)

コマンドプロンプトで:

sqlldr system@databasename/password control='control file location'
1
syed rizwan

SQLローダーを呼び出すときに、ログファイル名を指定する必要があります。

sqlldr myusername/mypassword control=Billing.ctl log=Billing.log

Pythonの内部からSQLローダーを呼び出すと、この問題が発生しました。次の記事は、SQLローダーを呼び出すときに指定できるすべてのパラメーターを示しています http://docs.Oracle.com/cd/A97630_01/server.920/a96652/ch04.htm

1
casey_barwell

「行1」-WindowsとUNIXの改行についてはどうでしょうか。 (私が上記のwindows 7を見たように)。

0

-ステップ1:一時テーブルを作成します。テーブルBilling(TAP_ID char(10)、ACCT_NUM char(10));を作成します。

SELECT * FROM BILLING;

-ステップ2:制御ファイルを作成します。

ファイルIN_DATA.txt内のデータを、 '、'で終了するテーブル請求フィールドにロードします(TAP_ID、ACCT_NUM)

-ステップ3:入力データファイルを作成します。 IN_DATA.txtファイルの内容:100,15678966

-ステップ4:runからコマンドを実行します:.. client\bin> sqlldr username @ db-sis__id/password control = 'Billing.ctl'

0
VXJ8464

あなたのテキストが:ジョーは言った、「フレッドは彼の「妻」と一緒にここにいた」。
これは、CSVで次のように保存されます。
「ジョーは言った、「フレッドは彼の「妻」と一緒にここにいた」。」
(ルールはフィールド全体を囲む二重引用符であり、二重引用符は2つの二重引用符に変換されます)。したがって、単純なオプションのEnclosed By句が必要ですが、十分ではありません。このルールのため、CSVは厳しいものです。そのフィールドのローダーでReplace句を使用できる場合がありますが、データによってはこれでは不十分な場合があります。 Oracleにロードするには、CSVの前処理が必要になることがよくあります。または、XLSとして保存し、Oracle SQL Developerアプリを使用してテーブルにインポートします。1回限りの作業には最適ですが、スクリプトにはあまり適していません。

0
Mot

"|"で終了するテーブルCERT_EXCLUSION_LISTフィールドにデータファイル 'D:\ CertificationInputFile.csv'をロードしますオプションで「」で囲まれています(CERTIFICATIONNAME、CERTIFICATIONVERSION)

0
Mr.T