前へ Source and Target Connectors 次へ

SQL 接続の作成と使用

Database Simulator

Database Simulator コネクタは、別のプラットフォームで使用する予定のある変換を設計する Integration Engine ユーザー用に提供されています。Database Simulator は、各種ネイティブ データベース コネクタ(Oracle、SQLBase、Access など)のシミュレーションを実行します。

Map Designer の設計セッション時に、Database Simulator は、存在しないか、またはワークステーションからアクセスできないデータベースへの接続のシミュレーションを実行するように機能します。Database Simulator を使用すると、接続情報を確立し、マッピング構造とフィルタを設計できます。このシミュレーション接続により、Map Designer から重要なデータ型の制約とその他の有用な情報が提供され、別のプラットフォームでシームレスに実行される完全な変換を構築するのに役立ちます。

Database Simulator の動作

直接アクセスできないデータベースにライブ接続しようとすると、Map Designer は自動的にそのアプリケーションへのシミュレータ コネクタに切り替えます。切り替えが完了したことと「シミュレート」していることを示すメッセージが、通常の接続情報と共に画面に表示されます。

接続手順

接続手順については、シミュレーションを行っているアプリケーションの「接続手順」を参照してください。

制限事項

シミュレート中のアプリケーションの制限事項を参照してください。

プロパティ オプション

使用できるコネクタ固有の設定は、シミュレート中のアプリケーションによって異なります。

RecordCount(ソースのみ)

ソース ファイル内のレコード数を指定します。Map Designer は、5 レコード分のシミュレーション ファイルを提供します。

ソース スキーマ

構造は Database Simulator がソース コネクタであるときにロック解除されます。詳細については、シミュレートしているアプリケーションのソース スキーマのトピックを参照してください。

ターゲット スキーマ

Database Simulator がターゲット コネクタの場合は、ツールバーの[ターゲット スキーマ]アイコンがアクティブになります。アイコンをクリックすると、ターゲット ファイルの構造を定義できます。このウィンドウの基本的な使用法については、『Structured Schema Designer User's Guide』のStructured Schema Designer ウィンドウ を参照してください。詳細については、シミュレートしているアプリケーションのターゲット スキーマのトピックを参照してください。

リレーショナル データベース管理システム(RDBMS)

RDBMS は関連テーブルの形式でデータが格納されているデータベース管理システム(DBMS)です。このファイル タイプのカテゴリには、各種の SQL データベース システムおよびリレーショナル データベース システムが含まれます。Map Designer では、既にフィールドおよびレコードに解析されたデータをこれらのシステムから読み取ることができますが、このデータを異なるカテゴリとして処理するための特殊な機能があります。

このデータベース システムの最も顕著な特徴は、データを複数のテーブルに格納できる点で、その多くは主キー フィールドの使用によって連結されます。Map Designer を使用してこのシステムのいずれかから(またはいずれかへ)データを変換する場合、通常は 1 回の変換処理で 1 つのテーブルを変換します。データ変換プロジェクト全体を完了するには、多数の変換の作成と保存が必要な場合があります。

このカテゴリに含まれるアプリケーションには、Access、DB2 Universal Database、Informix、MySQL、Oracle、SQL Server、SQLBase、Sybase、Watcom SQL などがあります。

RDBMS テーブルに接続するには、いくつかの要件を満たす必要があります。データベース クライアント アプリケーションが、インストール済みかつ構成済みでなければならず、サーバー構成および権限が正しく設定されていなければなりません。各 RDBMS アプリケーションには、特殊文字、大文字と小文字の区別、サポートするデータ型、サポートする日付/時間のフィールド、ヌル処理、クエリ構文、およびストアド プロシージャの構文についてそれぞれ独自のルールがあります。

詳細については、RDBMS コネクタの接続手順、制限事項、プロパティの各オプションのトピックを参照してください。

特定のソース コネクタまたはターゲット コネクタの詳細については、ソースおよびターゲット コネクタ を参照するか、[検索]タブで用語を検索してください。

関連項目

『Structured Schema Designer User's Guide』のスキーマの種類

SQL テーブルのインデックスおよび主キーの作成

SQL のインデックスを使用すると、データの迅速な検索と読み取りができます。SQL コネクタおよび ODBC コネクタでは、ConstraintDDL プロパティ オプションからこの強力なツールを使用できます。

インデックスの作成

ConstraintDDL プロパティは、ターゲット テーブル作成後に実行する追加 SQL データ定義言語ステートメントの指定を可能にします。これは、SQL インポート コネクタでの SQL パススルーに対するサポート内容と同様です。各行は必ず有効な ODBC DDL ステートメントであることが必要です。

たとえば、次のようなステートメントを指定できます。

CREATE UNIQUE INDEX index1 ON mytable (Field1 ASC) 
CREATE INDEX index2 ON mytable (Field2, Field3) 

上記のステートメントを実行すると、"mytable" というテーブルに 2 つのインデックスが作成されます。最初のインデックスでは重複を禁止しており、インデックス値は昇順で保存されます。2 番目のインデックスは、Field2 フィールドおよび Field3 フィールドの複合インデックスです。


メモ
ConstraintDDL が実行されるのは、ターゲットに対して置換モードを使用する場合のみです。エラーが発生した場合、そのエラーはエラーおよびイベント ログ ファイルに書き込まれます。その場合、変換処理中に[変換エラー]ダイアログ ボックスが表示されます。DDL エラーを無視する場合は、変換を続行できます。

インデックスの削除

作成したインデックスが有用でなくなった場合や、ディスク領域を多く取りすぎる場合、古くなりすぎた場合などは、次のステートメントを使用してインデックスを削除することができます。

DROP INDEX index1

主キーの作成

ConstraintDDL は、ユーザーが DBMS のネイティブ SQL で DDL を指定できるエスケープ機構もサポートしています。'@' で始まるステートメントは DBMS に直接送信されます。

次に例を示します。

@CREATE INDEX pk_mytable ON mytable (Field1, Field2) WITH PRIMARY

この文は、テーブル "mytable" の主キーを作成する Microsoft Access DDL ステートメントです。Access ODBC ドライバでは、SQL CREATE ステートメントの ODBC バリアントを使用する主キー作成に必要な SQL 拡張機能はサポートされていません。Access テーブルの主キーを作成するには、ネイティブ SQL を使用する以外ありません。


メモ
このオプションは置換モードの場合のみ有効です。

PL/SQL ストアド プロシージャの呼び出し

Map Designer 内で PL/SQL コードを渡すことができます。[変換およびマップ プロパティ]を開き、BeforeTransformation イベントをクリックします。次に[クエリ ステートメント]ラジオ ボタンをクリックします。次に[SQL ステートメント]の隣にある[...](省略記号)ボタンをクリックし、PL/SQL ステートメントを入力します。

パラメータなしの単一のプロシージャ

パラメータを取らない単一の PL/SQL プロシージャを呼び出す場合は、次の例のように構文を指定します。

BEGIN ProcedureName¥; END¥;

または、次のように入力できます。

BEGIN "Package"."ProcedureName"¥; END¥;

refcursor タイプの単一出力パラメータ

クエリ ステートメントで Execute キーワードを使用し、出力 refcursor 以外のすべてのパラメータに値を指定したストアド プロシージャを指定します。出力 refcursor は、SQL-Plus がホスト変数に対して行うように、コロンと変数名(たとえば :cv)を使用して示す必要があります。

例:

下記の例を使用した場合、ストアド プロシージャは次のように定義されます。

tutor1_get.getacn(pointer in number, refc out refcursor)

SQL クエリ ステートメント]ウィンドウで、以下のように SQL クエリ コマンドを入力します。

execute tutor1_get.getacn(10056, :cv)


メモ
このタイプの refcursor パラメータは、Oracle 8.x および Oracle 9i コネクタで使用できます。
変数を渡す

ストアド プロシージャ呼び出しで変数を渡すには、DJX を使用します。DJX を使用すると、一時的に SQL から RIFL にエスケープして文字列を操作したり、変数にアクセスすることができます。

例:

DJX("BEGIN Package.ProcedureName(" & var & "); END;")

var には、ストアド プロシージャに渡す変数の名前を指定してください。

構文に関する注意:最初の DJX コマンドは引用符で囲まれていませんが、外側のかっこ内にある SQL ステートメント全体は引用符で囲まれていることに注目してください。内側のかっこの中に引用符があります。これは、最初の SQL ステートメント部分に変数の内容を連結し、次に、その連結したステートメントの終わりに 2 番目の SQL ステートメント部分を連結するためです。変数の値を変数のリテラル名にではなく SQL ステートメントに動的に割り当てる必要があるため、このようになっています。

Oracle の結合のヒント

Oracle の結合を作成する構文の概要について説明します。詳細については、Oracle のマニュアルを参照してください。

基本構文

SELECT *

FROM emp, dept

WHERE emp.deptno = dept.deptno;

SELECT dept.deptno, name_view.emp_fullname FROM emp_fullname, dept WHERE dept.deptno = name_view.deptno(+) AND dept.deptloc = 'London';

結合順序のヒント

ORDERED を指定すると、FROM 句に列挙されているのと同じ順序で、左から右へテーブルが結合されます。

STAR を指定すると、可能であればスター クエリ実行計画が使用されます。これは、少なくとも 3 つのテーブルが結合され、さらに最大のテーブルの列の中にほかの 2 テーブルを参照する連結インデックスがある場合にのみ有効です。この小さい方の 2 つのテーブルが最初に結合され、その後でネステッド ループ結合を使って、大きい方のテーブルから必要な行が取得されます。

STAR_TRANSFORMATION は Oracle に対し、可能であればクエリをスター クエリに変換し、それから、そのクエリに最適なプランを使用するように指示します。

結合操作のヒント

USE_NL(テーブル名)は、指定したテーブルを結合するとき、ネステッド ループを使用するように Oracle に指示します。このヒントで指定するテーブルは、最も内側のループでアクセスされるテーブルです。ほかのテーブルは制御用のテーブルです。マージ結合に比べて戻り時間は速くなりますが、ディスクの読み取り回数は逆に多くなる場合があります。

USE_MERGE(テーブル名)は、指定したテーブルを結合する場合にソート マージ方法を使用するように Oracle に指示します。消費リソースは節約できますが、最初の結果が戻る前に、すべてのレコードがソートされるのを待機しなければなりません。ソート処理を行うには、十分なメモリ容量と一時ディスク容量が必要です。

USE_HASH(テーブル名)は、指定したテーブルに対してハッシュ結合を行うように Oracle に指示します。マージ結合と似ていますが、ソートする必要はありません。ハッシュ テーブルはメモリ内に作成され、すばやい応答が可能です。

NO_MERGE は、USE_MERGE の逆ではありません。NO_MERGE ヒントは、1 つまたは複数のビューの結合を含んでいるクエリに適用されます。このヒントを使用すると、Oracle はビューのクエリをメインのクエリにマージしなくなります。

DRIVING_SITE(テーブル名)。このヒントは、ユーザーが 2 つ以上のデータベースからテーブルの結合を行う分散結合を実行している場合に適用されます。ヒントを指定しないで実行すると、Oracle は実際にテーブルを収集するデータベースを選択し、そこで結合を行います。ヒントを使用することで、指定したテーブルが含まれているデータベースで結合処理を実行するよう Oracle に指示できます。

マルチモード コネクタで使用する SQL Literal プロパティ

SQL Literal プロパティを使用すると、SQL DML(Data Manipulation Language)ステートメントが生成される場合のフィールド値の評価方法を制御することができます。このオプションは、マルチモード コネクタでのみ使用できます。

SQL Literal プロパティを使用しない場合(デフォルト)、データ値として使用するようにデータを引用符で囲みます。

SQL Literal プロパティを使用すると、関数、プロシージャ、計算値、またはインラインの Insert、Update、または Delete ステートメントの一部であるパッケージを呼び出すことができます。たとえば、あるテーブルから州を示すコードを戻す必要があるとします。AfterEveryRecord イベントに DJImport オブジェクトを使用する方法は低速で、十分な結果が得られません。その代わりに、関数を記述してこれを Insert ステートメントの一部として呼び出すことができます。

Oracle 関数を使用するには

  1. ルックアップ用テーブルを作成します。
  2. Create table STATECODE(

      F1 char(15), 

      F2 char(2)); 

  3. ルックアップ テーブルにデータを挿入します。
  4. Insert into STATECODE (F1,F2) values ('Texas','TX');

    Insert into STATECODE (F1,F2) values ('Oklahoma','OK');

    Insert into STATECODE (F1,F2) values ('Colorado','CO');

    ここでコミット命令も出します。

  5. テーブル内のデータを確認します。
  6. Select * from STATECODE;

    F1 F2

    -----------------

    Texas TX

    Oklahoma OK

    Colorado CO

  7. 次のデータを含む区切り記号付き ASCII ソース ファイルを作成します。
  8. Bobbi,Texas

    Chris,Texas

    Joe,Oklahoma

    Lynn,Colorado

    Paul,Oklahoma

    Jerry,Colorado

    Tim,Texas

  9. データを挿入するターゲット テーブルを作成します。
  10. Create table NAMESTATE(

    NAME char(16),

    STATE char(2));

  11. ルックアップを実行し、ターゲット テーブルに挿入する値を戻す関数を作成します。
  12. CREATE FUNCTION "SCOTT"."STATELOOKUP" (STATESTR in CHAR)

    Return CHAR

    as

    ST char(2);

    Begin

      SELECT F2 into ST from STATECODE where F1 = STATESTR;

    Return ST;

    end;

  13. Select の関数をテストします。
  14. Select STATELOOKUP('Texas') ME from DUAL;

    ME

    ------

    TX

    Insert の関数をテストします。

    INSERT INTO "NAMESTATE" ("NAME", "STATE") VALUES ('Bobbi', STATELOOKUP('Texas'));

    Select STATE from NAMESTATE;

    STATE

    ------

    TX

  15. マップを作成します。
  16. 区切り記号付き ASCII をソース コネクタとして選択します。手順 4 で作成したファイルを参照し、このファイルに接続します。ターゲット コネクタには、Oracle マルチモードを選択します。[マップ]タブで、[ソース]の最初のフィールドを[ターゲット]にマッピングします。

    このフィールドの名前を NAME に変更します。STATE という名前の 2 番目のフィールドを追加し、長さを 2 にします。STATE フィールドの隣にある緑のボックスを右クリックして、[フィールド プロパティ]を開きます。SQL Literal を "Yes" に変更します。これは、Map Designer に対して、この列内のすべての値をインライン SQL ステートメントとして扱うように指示したことを意味します。NAMESTATE テーブルに ClearMapInsert を追加します。STATE フィールドで RIFL スクリプト エディタを開きます。スクリプトを次のように編集します。

    "STATELOOKUP('" & Trim(Records("R1").Fields("Field2")) & "')"

これまでに行った内容を要約します。まず、呼び出す関数を表すリテラル文字列、STATELOOKUP() があります。この関数に州の名前を渡すと、それを基に州コードが返されます。関数のパラメータ用の開くかっこと、文字の引用符で囲まれた識別子用の一重引用符が追加されていることに注目してください。次に、Oracle 関数に渡すソースのフィールドを連結し、先頭および末尾のスペースを除去するための Trim 関数を呼び出します。それから、終わりの一重引用符を連結し、かっこを閉じます。結果は次のようになります。

Records("R1").Fields("Field2") の値が Hawaii の場合には、次のようになります。

STATELOOKUP('Hawaii')

Map Designer の DML で Insert ステートメントを生成すると、ソース ファイルの最初のレコードに基づいて Insert ステートメントは次のようになります。

INSERT INTO "NAMESTATE" ("NAME", "STATE") VALUES ('Bobbi', STATELOOKUP('Texas'))

SQL Literal プロパティを "Yes" と "No" に設定した組み合わせを使用して、DML ステートメントが生成されています。最初の列の NAME は "Yes" に設定しなかったため、データ値の引用符で囲まれた識別子が追加されました。関数の STATELOOKUP() はリテラルとして扱われたため、Insert ステートメント内のインライン関数呼び出しとなっています。

関連項目

『RIFL Programmer's Reference』の関数の一覧

『Intermediate and Advanced Mapping Guide』のターゲットの一般的なイベント ハンドラ

『Intermediate and Advanced Mapping Guide』の最も効果的なルックアップ方法


前へ

ODBC およびその他のミドルウェアによる接続

次へ

不明なアプリケーションまたはファイル形式