連載
» 2005年07月08日 00時00分 UPDATE

Excel‐Oracle連携(1):ExcelデータをOracleに格納する3つの手法 (1/3)

企業の部門内に蓄積された大量のExcelデータをデータベースで管理したい。あるいは、Excelで作成した業務書類からシステムに手作業でデータ入力する工数を削減したい。このようなニーズに応えるべく、OracleデータベースにはExcelからOracleへのさまざまな連携機能が備わっている。(編集部)

[宮本尚志,日本オラクル]

はじめに

主な内容

--Page 1--

▼はじめに

▼ExcelとOracleの連携パターン

▼SQL*Loaderを使用する方法

--Page 2--

Oracle HTML DBを使用する方法

--Page 3--

Oracle Generic Connectivityを使用する方法

まとめ


 OracleデータベースとExcelを組み合わせれば、Excelで入力したデータをOracleデータベースに格納したり、Oracleデータベース内のデータをExcelで参照、変更することができます。小規模なシステムでは、Excelをフロントアプリケーションとして使用することで、ユーザー・インターフェイスの開発を最小限に抑えられますし、利用する側も使い慣れたExcelのインターフェイスを使用できます。また、データ量や利用者数の拡大に伴い、データをExcelで管理するのが困難になることもあります。そのような場合には、ExcelのデータをOracleデータベースに移すことも可能です。

 本連載では、ExcelとOracleデータベースを連携させる方法にどのようなものがあるのか紹介します。第1回の本記事では、ExcelデータをOracleデータベースに格納する方法について取り上げます。

ExcelとOracleの連携パターン

 ExcelデータをOracleデータベースに格納する方法は数多くあります。表1にそれらの方法をまとめました。それぞれに特徴がありますので、用途に合わせて使い分けることになります。

連携パターン メリット 主な用途
SQL*Loaderを使用 大量のCSVファイルから高速にデータをOracleデータベースに格納可能 大量データ/ファイルからの一括ロード
OracleHTML DBを使用 Excelの表形式データを基に、Oracleデータベース内に表や簡易Webアプリケーションを作成可能、OracleClient不要 個人管理のExcelファイルからのデータロード、Webアプリケーションへの移行
Oracle Generic Connectivityを使用 Excel(.xls)ファイル内の表形式データを外部表のようにOracleデータベースから使用可能 複数人で共有しているExcelファイルからのデータロード
KeySQLを使用 Oracleデータベースに対するExcelからのINSERTの設定をGUIで行える マスタ表のメンテナンス
VBAでODBCなどを使いINSERT文発行 VBAのコーディング次第で柔軟な処理が可能 Excelを利用した業務アプリケーション
ExcelデータをXML化してOracleデータベースに格納 表形式でないExcelデータをOracleに格納可能、Oracle Client不要 表形式にしにくいデータのOracleデータベースへの保存
表1 ExcelデータをOracleデータベースに格納する方法

 本記事では、このうちSQL*Loader、Oracle HTML DB、Oracle Generic Connectivityについて紹介します。KeySQLを使う方法とODBCなどを使用する方法については、今後の連載で紹介します。ExcelデータをXML化してOracleデータベースに格納する方法については、特集記事「ExcelデータをOracleに格納する裏技」を参照してください。

 また、本連載では触れませんが、Excel(.xls)ファイルをバイナリファイルとしてデータベースのBLOB型の列に格納する方法もあります。その場合、Oracleデータベース側でExcelデータを活用することはできませんが、OracleContent Management SDK(CMSDK、旧iFS)、Oracle XML DBリポジトリ(OracleXML DB)といった機能を使用すれば、Oracleデータベースをファイルサーバとして使用できます。Oracleデータベースを使用したファイル管理アプリケーションも数多く存在するので、それらを利用してもExcelファイルなどをバイナリファイルとしてOracleデータベースに格納することが可能です。

SQL*Loaderを使用する方法

 SQL*Loaderは、外部ファイルのデータをOracleデータベースの表に取り込むユーティリティで、Oracleデータベースに標準で付属しています。このツールにより、CSVファイルからデータを読み込み、Oracleデータベースの表に書き込むことができます。データベース・サーバ、またはOracle Clientをインストールしたクライアント端末から使用可能です。

 SQL*LoaderではSQL*PlusなどからINSERT処理をするよりも高速にデータをテーブルに書き込むことが可能です。従って、大量データを一度にロードするバッチ処理には最適です。

手順

 SQL*Loader自体はコマンドライン・ユーティリティであり、以下のようなコマンドを実行することでデータをロードします(Oracle Enterprise Managerなど、GUI操作でSQL*Loaderのコマンドを発行できるツールもあります)。

C:\> sqlldr scott/tiger control=test.ctl direct=true parallel=true

 このコマンドを見ても分かるように、どの表にどんなデータをロードするかは、制御ファイル(Oracleデータベースの制御ファイルとは異なります)という別のファイルに記述しておきます。ここでは、test.ctlというファイルが制御ファイルで、その中身は以下のようなものです。

LOAD DATA
INFILE 'test.csv'
INTO TABLE anken
APPEND
FIELDS TERMINATED BY ',' trailing nullcols
(案件番号,担当営業,顧客社名,金額,提案商品,受注確度,状態,受失注日 "to_date(:受失注日, 'MM\"月\"DD\"日\"')")
リスト1 SQL*Loader用の制御ファイル

 ここでは、カンマで区切られたtest.csvの中身をanken表にロードする、という内容を記述しています。test.csvは以下のようなファイルです。

1,大森,悠久電子工業(株),300000,OR-002,20,提案中,
2,篠崎,黒山興業(株),500000,OR-004,40,提案中,
3,十川,(株)古代歴史社,200000,FZ-017,100,受注,6月20日
4,門脇,(有)みずしま酒造,800000,PC-006,10,提案前,
5,春原,中央データ通信(株),150000,FZ-014,60,見積提出,
6,飯岡,(株)ホテル志正,250000,FZ-021,80,選定待ち,
7,宮本,(株)ORZジャパン,150000,FZ-014,0,失注,6月15日
8,渕澤,不離商事(株),800000,PC-006,40,提案中,
9,十川,ハイワシ産業(株),600000,PC-004,20,提案中,
10,宮本,第一健康食品(株),300000,OR-002,100,受注,6月29日
11,飯岡,(株)蝮谷,200000,FZ-017,40,提案中,
リスト2 SQL*Loaderで読み込むCSVファイル

 このように、CSVファイル、制御ファイルを用意すれば、簡単なコマンドでデータをOracleデータベースにロードできます。

 制御ファイルの記述が難しい、と思う方もいるかもしれませんが、制御ファイルをGUI操作で生成可能なツール(OracleWarehouse Builderなど)を利用すれば、制御ファイルを手入力で作成する必要はありません。

 もっと簡単にExcelデータをOracleデータベースに格納したいという場合は、次に紹介するOracle HTML DBを使う方法があります。(次ページに続く)

       1|2|3 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

Focus

- PR -

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。