37

私はしばらく探していましたが、答えが見つからないようですので、ここに行きます...

Oracle(9i / 10i)のテーブルにインポートしたいCSVファイルがあります。

後で、このテーブルを別の用途のルックアップとして使用する予定です。

1000を超える値を持つIN句を使用してクエリを実行することはできないため、これは実際に私が取り組んでいる回避策です。

これはSQLPLUSを使用してどのように行われますか?

御時間ありがとうございます!:)

4

7 に答える 7

29

SQLローダーはcsvファイルをテーブルにロードするのに役立ちます:SQL * Loader

sqlplusのみが必要な場合は、少し複雑になります。sqlloaderスクリプトとcsvファイルを見つけて、sqlldrコマンドを実行する必要があります。

于 2011-06-01T09:24:58.600 に答える
27

使用できるもう1つのソリューションは、SQLDeveloperです。

これを使用すると、csvファイルからインポートすることができます(他の区切られたファイルが利用可能です)。

テーブルビューを開いて、次のようにします。

  • アクションを選択
  • データのインポート
  • ファイルを探す
  • オプションを選択してください。

SQL Developerに挿入を実行させる、SQL挿入スクリプトを作成する、またはSQLローダースクリプトのデータを作成するオプションがあります(このオプションを自分で試したことはありません)。

もちろん、コマンドラインしか使用できない場合は問題ありませんが、SQL Developerを使用してローカルでテストできる場合は、生成された挿入スクリプトをいつでも展開できます(たとえば)。

すでに非常に良い2つの答えに別のオプションを追加するだけです。

于 2012-09-12T15:10:42.303 に答える
6

別の解決策は、外部テーブルを使用することです:http ://www.orafaq.com/node/848

このインポートを非常に頻繁かつ非常に高速に実行する必要がある場合は、これを使用します。

于 2011-06-01T19:43:01.393 に答える
6

SQLローダーはその方法です。最近、この概念に新しいcsvファイルからテーブルをロードしました。例を共有したいと思います。

LOAD DATA
    infile '/ipoapplication/utl_file/LBR_HE_Mar16.csv'
    REPLACE
    INTO TABLE LOAN_BALANCE_MASTER_INT
    fields terminated by ',' optionally enclosed by '"'
    (
    ACCOUNT_NO,
    CUSTOMER_NAME,
    LIMIT,
    REGION

    )

制御ファイルとcsvをサーバー上の同じ場所に配置します。sqlldr exeを見つけて、呼び出します。

sqlldr userid / passwd @ DBname control =例:sqlldr abc / xyz @ ora control = load.ctl

それが役に立てば幸い。

于 2016-06-01T10:53:44.637 に答える
3

誰かが私にフレームワークへのリンクを投稿するように頼みました!これは、Open World 2012で発表したものです。これは、外部テーブルを使用してソリューションを設計する方法を示す完全なブログ投稿です。

于 2012-11-17T18:59:30.380 に答える
2

インライン外部テーブルOracle 18cを使用できます。

インライン外部テーブルを使用すると、データディクショナリに永続オブジェクトとして外部テーブルを作成しなくても、SQLステートメントの一部として外部テーブルを実行時に定義できます。

インライン外部テーブルでは、CREATE TABLEステートメントを使用して外部テーブルを作成するために使用されるのと同じ構文を、実行時にSELECTステートメントで使用できます。クエリブロックのFROM句でインライン外部テーブルを指定します。インライン外部テーブルを含むクエリには、結合、集計などの通常のテーブルを含めることもできます。

INSERT INTO target_table(time_id, prod_id, quantity_sold, amount_sold)
SELECT time_id, prod_id, quantity_sold, amount_sold
FROM   EXTERNAL (   
    (time_id        DATE NOT NULL,     
     prod_id        INTEGER NOT NULL,
     quantity_sold  NUMBER(10,2),
     amount_sold    NUMBER(10,2))     
    TYPE ORACLE_LOADER     
    DEFAULT DIRECTORY data_dir1
    ACCESS PARAMETERS (
      RECORDS DELIMITED BY NEWLINE
      FIELDS TERMINATED BY '|')     
   LOCATION ('sales_9.csv') REJECT LIMIT UNLIMITED) sales_external;
于 2018-03-02T21:31:32.993 に答える
1

2つのヒントを共有したいと思います:(ヒント1)csvファイルを作成します(ヒント2)csvファイルからテーブルに行をロードします。

==== [(ヒント1)Oracleテーブルからcsvファイルを作成するSQLPLUS] ====

次のコマンドでSQLPLUSを使用します。

set markup csv on
set lines 1000
set pagesize 100000 linesize 1000
set feedback off 
set trimspool on
spool /MyFolderAndFilename.csv
Select *  from MYschema.MYTABLE  where MyWhereConditions ;
spool off
exit

====[ヒント2csvファイルをテーブルにロードするためのSQLLDR]====

SQLLDRとcsv(コンマ区切り)ファイルを使用して、csvファイルからテーブルに行を追加(APPEND)します。ファイルには、フィールド間テキストフィールドには「テキストの前後に」がありますCRITICAL:最後の列がnullの場合、行の終わりに、があります

csvファイルのデータ行の例:

11,"aa",1001
22,"bb',2002
33,"cc",
44,"dd",4004
55,"ee',

これは制御ファイルです:

LOAD DATA
APPEND 
INTO TABLE MYSCHEMA.MYTABLE
fields terminated by ',' optionally enclosed by '"'
TRAILING NULLCOLS
(
CoulmnName1,
CoulmnName2,
CoulmnName3
)

これは、Linuxでsqlldrを実行するためのコマンドです。Windowsで実行する場合は、/cの代わりに\を使用してください。

sqlldr userid=MyOracleUser/MyOraclePassword@MyOracleServerIPaddress:port/MyOracleSIDorService  DATA=datafile.csv  CONTROL=controlfile.ctl  LOG=logfile.log  BAD=notloadedrows.bad

幸運を !

于 2021-01-22T22:32:22.103 に答える