MATLABからOracleへのアクセス方法

動作確認OSはWindows XP、オラクルのバージョンはOracle 10gである。

設定方法

Windows版のMATLABからOracleデータベースへアクセスするには、TNSNAMES.ORAの設定とODBCドライバーの設定が必要である。
  1. TNSNAMES.ORAの設定

  2. OracleクライアントのTNSNAMES.ORAファイルを編集し、Oracleサーバーの設定を追加する。

    C:\…\NETWORK\ADMIN\TNSNAMES.ORA
    
    [ネット・サービス名]=
      (DESCRIPTION=
        (ADDRESS=(PROTOCOL=TCP)(HOST=[アドレス])(PORT=[ポート番号]))
        (CONNECT_DATA=(SERVICE_NAME=[サービス名]))
      )

  3. ODBCドライバーの設定


    1. [コントロール パネル]−[管理ツール]−[データソース(ODBC)]を起動する。
    2. [User DSN]タブを選び、[Add...]ボタンをクリックする。
    3. 「Create New Data Source」ダイアログボックスで、「Oracle in Ora_Client_Home」をダブルクリックする。
    4. Oracle ODBC Driver Configuration」ダイアログボックスに、以下の情報を入力し、[OK]ボタンを押す。
    5. Data Source Name : データソース名(任意の名前)
      Description      : 説明
      TNS Service Name : サービス名
      User ID          : ユーザー名

    6. [Test Connection]ボタンをクリックし、接続テストを行う。「Connection successful」のメッセージが出れば成功。エラーが出た場合は、設定を見直す。



接続方法

プログラムからアクセスする方法

  • database()で、データベースと接続する。
  • exec()で、SQL文を実行する。SQL文の中に文字列がある場合は、'(クォーテーション)2つで囲むこと。
  • fetch()で、データを取り出す。2番目の引数は取り出す行数で、指定しなければ全データが対象。
  • データは cell 配列に読み込まれる。データを数値として取り出したい場合は、cell2mat()関数で単一行列に変換しなければならない。

詳しくは、マニュアル「Database Toolbox」の3章〜4章を参照のこと。

conn = database('[データソース名]','[ユーザー名]','[パスワード]');
curs = exec(conn, 'select * from usertable where okfield = ''OK''');
curs = fetch(curs, 10);

D = curs.Data;        % データ部分を切り出す
D1 = D(:,[1]);        % 最初のフィールドのデータを取り出す
D1 = cell2mat(D1);    % cell配列を数値の配列に変換する

numrows = rows(curs);
numcols = cols(curs);
colnames = columnnames(curs);
colsize = width(curs, 1);

close(curs);
close(conn);



Visual Query Builderツールを利用する方法
Visual Query Builderツールを使用して、Oracleデータベース上のデータを変数にインポートしたり、MATLAB上のデータをデータベースにインサートすることが可能である。
ここでは、MATLABの変数にインポートする場合の手順のみを説明する。詳しくは、マニュアル「Database Toolbox」の第2章を参照のこと。

起動
MATLABの左下の[スタート]ボタン−[Toolboxes]−[Database]−[Visual Query Builder]を選択し、起動する。
Data operation
[Select]を選択する。
Data source
いずれかを選択すると、UsernameとPasswordの入力ダイアログが表示されるので、入力し[OK]を押す。
Tables
いずれかを選択する。
Fields
いずれかを選択する。
Advanced query options
[All]か[Distinct]を選択する。必要なら、[Where...]、[Group by...]、[Having...]、[Order by...]のボタンを押して、条件を設定する。
SQL statement
SQLが表示される。編集も可能。
MATLAB workspace variable
データを出力する変数の名前を入力し、[Execute]ボタンを押す。