企業の部門内に蓄積された大量のExcelデータをデータベースで管理したい。あるいは、Excelで作成した業務書類からシステムに手作業でデータ入力する工数を削減したい。このようなニーズに応えるべく、OracleデータベースにはExcelからOracleへのさまざまな連携機能が備わっている。(編集部)
--Page 1--
▼はじめに
▼ExcelとOracleの連携パターン
▼SQL*Loaderを使用する方法
--Page 2--
--Page 3--
Oracle Generic Connectivityを使用する方法
▼まとめ
OracleデータベースとExcelを組み合わせれば、Excelで入力したデータをOracleデータベースに格納したり、Oracleデータベース内のデータをExcelで参照、変更することができます。小規模なシステムでは、Excelをフロントアプリケーションとして使用することで、ユーザー・インターフェイスの開発を最小限に抑えられますし、利用する側も使い慣れたExcelのインターフェイスを使用できます。また、データ量や利用者数の拡大に伴い、データをExcelで管理するのが困難になることもあります。そのような場合には、ExcelのデータをOracleデータベースに移すことも可能です。
本連載では、ExcelとOracleデータベースを連携させる方法にどのようなものがあるのか紹介します。第1回の本記事では、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は、外部ファイルのデータを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 |
リスト1 SQL*Loader用の制御ファイル |
ここでは、カンマで区切られたtest.csvの中身をanken表にロードする、という内容を記述しています。test.csvは以下のようなファイルです。
1,大森,悠久電子工業(株),300000,OR-002,20,提案中, |
リスト2 SQL*Loaderで読み込むCSVファイル |
このように、CSVファイル、制御ファイルを用意すれば、簡単なコマンドでデータをOracleデータベースにロードできます。
制御ファイルの記述が難しい、と思う方もいるかもしれませんが、制御ファイルをGUI操作で生成可能なツール(OracleWarehouse Builderなど)を利用すれば、制御ファイルを手入力で作成する必要はありません。
もっと簡単にExcelデータをOracleデータベースに格納したいという場合は、次に紹介するOracle HTML DBを使う方法があります。(次ページに続く)
Copyright © ITmedia, Inc. All Rights Reserved.