マッピングおよびプロセス・フローを設計する際に、専用の変換を使用してデータを変換できます。この章では、独自の変換の作成方法と、Warehouse Builderが提供する事前定義済の変換の使用方法を説明します。
この章の内容は次のとおりです。
カスタム変換には、プロシージャ、ファンクションおよびパッケージが含まれます。Warehouse Builderには、各タイプのカスタム変換を作成するためのウィザードが用意されています。カスタム変換は、グローバル共有ライブラリまたはプロジェクトのモジュールに分類できます。
グローバル共有ライブラリ内のカスタム変換
グローバル共有ライブラリに含まれるカスタム変換は、そのカスタム変換が定義されたワークスペース内のすべてのプロジェクトで使用できます。たとえば、ワークスペースREP_OWNER
のグローバル共有ライブラリにADD_EMPL
というファンクションを作成したとします。このプロシージャは、REP_OWNER
内のすべてのプロジェクトで使用できます。
ワークスペース内のすべてのプロジェクトで使用できるカスタム変換を定義するには、グローバル・エクスプローラにある「パブリック変換」ノードの「カスタム」ノードを使用します。図19-1に、このような変換の作成に使用するグローバル・エクスプローラを示します。
カスタム変換をグローバル共有ライブラリに作成する手順は、次のとおりです。
グローバル・エクスプローラから「パブリック変換」ノードを開き、次に「カスタム」ノードを開きます。
Warehouse Builderでは、作成可能な変換のタイプが表示されます。これには、ファンクション、プロシージャおよびパッケージが含まれます。PL/SQLタイプはパッケージの一部としてのみ作成できることに注意してください。
定義する変換のタイプを右クリックして「新規」を選択します。
たとえば、ファンクションを作成するには、「ファンクション」を右クリックして「新規」を選択します。PL/SQLタイプを作成するには、そのPL/SQLタイプを作成するパッケージを開いて、「PL/SQLタイプ」を右クリックし、「新規」を選択します。
ファンクションまたはプロシージャの場合、Warehouse Builderでは、ファンクションの作成ウィザードまたはプロシージャの作成ウィザードのようこそページが表示されます。PL/SQLタイプの場合は、PL/SQLタイプの作成ウィザードのようこそページが表示されます。
「次へ」をクリックして続行します。ウィザードの他のページの詳細は、「ファンクションおよびプロシージャの定義」を参照してください。PL/SQLタイプの作成の詳細は、「PL/SQLタイプの定義」を参照してください。
パッケージの場合、Warehouse Builderでは、「変換ライブラリの作成」ダイアログ・ボックスが表示されます。パッケージの名前および説明(オプション)を入力し、「OK」をクリックします。新規のパッケージが「パッケージ」ノードに追加されます。続いて、このパッケージに属するプロシージャ、ファンクションまたはPL/SQLタイプを作成できます。
プロジェクト内のカスタム変換
現行のモジュールまたはプロジェクトのみに必要なカスタム変換の定義が必要になる場合があります。その場合は、プロジェクトのOracleモジュールにカスタム変換を定義できます。このようなカスタム変換は、現行のワークスペース内のすべてのプロジェクトからアクセスできます。たとえば、PROJECT1
とPROJECT2
の2つのプロジェクトが含まれるREP_OWNER
というワークスペース所有者を考えてみます。PROJECT1
のSALES
というOracleモジュールに、CALC_SAL
というプロシージャを定義します。このプロシージャは、PROJECT1
に属するすべてのモジュールで使用できますが、PROJECT2
ではアクセスできません。
図19-1に、プロジェクト・エクスプローラを示します。ここで、定義したプロジェクトからアクセス可能なカスタム変換を作成できます。
Oracleモジュールにカスタム変換を定義する手順は、次のとおりです。
プロジェクト・エクスプローラからOracleウェアハウス・モジュールのノードを開き、次に「変換」ノードを開きます。
作成する変換のタイプを右クリックして「新規」を選択します。
たとえば、パッケージを作成するには、「パッケージ」を右クリックして「新規」を選択します。PL/SQLタイプを作成するには、そのタイプを作成するパッケージ・ノードを開いて、「PL/SQLタイプ」を右クリックし、「新規」を選択します。
ファンクションまたはプロシージャの場合、Warehouse Builderでは、ファンクションの作成ウィザードまたはプロシージャの作成ウィザードのようこそページが表示されます。PL/SQLタイプの場合は、PL/SQLタイプの作成ウィザードのようこそページが表示されます。「次へ」をクリックして、前に進みます。
ウィザードの残りのページの詳細は、「ファンクションおよびプロシージャの定義」を参照してください。PL/SQLタイプの作成の詳細は、「PL/SQLタイプの定義」を参照してください。
パッケージの場合、Warehouse Builderでは、「変換ライブラリの作成」ダイアログ・ボックスが表示されます。パッケージの名前および説明(オプション)を入力し、「OK」をクリックします。パッケージが「パッケージ」ノードに追加されます。続いて、このパッケージに属するプロシージャ、ファンクションまたはPL/SQLタイプを作成できます。
ファンクションまたはプロシージャを定義するには、ファンクションの作成ウィザードまたはプロシージャの作成ウィザードの次の各ページを使用します。
名前と説明ページを使用してカスタム変換を記述します。このページで次の詳細を指定します。
名前Name: カスタム変換の名前を表します。ネーミング規則の詳細は、「データ・オブジェクトのネーミング規則」を参照してください。
説明: カスタム変換の説明を表します。これはオプションのフィールドです。
戻り型: ファンクションにより戻される値のデータ型を表します。戻り型は、リストの使用可能なオプションから選択します。このフィールドは、ファンクションにのみ適用可能です。
パラメータ・ページを使用して、変換の入力パラメータと出力パラメータを定義します。パラメータごとに次の詳細を指定します。
名前: パラメータ名を入力します。
タイプ: リストからパラメータのデータ型を選択します。
I/O: パラメータのタイプを選択します。使用可能なオプションは「入力」、「出力」および「入力/出力」です。
必須: パラメータを必須として指定するには「はい」を、オプションとして指定するには「いいえ」を選択します。
デフォルト値: パラメータのデフォルト値を入力します。デフォルト値は、ファンクションまたはプロシージャの実行時にパラメータ値を指定しない場合に使用されます。
実装ページを使用して、変換の実装詳細(コードなど)を指定します。ファンクションまたはプロシージャの実装に使用するコードを指定するには、「コード・エディタ」をクリックします。Warehouse Builderによりコード・エディタ・ウィンドウが表示されます。このエディタには2つのパネルがあります。上部パネルにはコードが表示され、下部パネルにはファンクション・シグネチャとメッセージが表示されます。
ファンクションを作成する場合は、さらに次のオプションが表示されます。
ファンクションがDETERMINISTIC: このヒントは、ファンクション・コールが冗長になることを防ぐのに役立ちます。ストアド・ファンクションが以前に同じ引数でコールされている場合、前の結果が使用できます。ファンクションの結果は、セッション変数またはスキーマ・オブジェクトの状態に依存しません。そうでない場合、結果はコールによって異なります。ファンクションベースの索引またはクエリー・リライトが有効なマテリアライズド・ビューからコールすることができるのは、DETERMINISTICファンクションのみです。
パラレル実行に対してファンクションを有効化: このオプションでは、ストアド・ファンクションをパラレルDML評価の子セッションで安全に使用できることを宣言します。メイン(ログオン)セッションの状態が、子セッションと共有されることはありません。子セッションには、それぞれセッションの開始時に初期化される各自の状態があります。ファンクションの結果は、セッション(静的)変数の状態に依存しません。そうでない場合、結果はセッションによって異なります。
サマリー・ページには、前のウィザード・ページで選択したオプションのサマリーが表示されます。ファンクションまたはプロシージャの定義を完了するには「終了」をクリックします。Warehouse Builderにより、ファンクションまたはプロシージャが作成され、グローバル・エクスプローラの「パブリック変換」ノードおよび「カスタム」ノード下の対応するフォルダに表示されます。
PL/SQLタイプの作成ウィザードを使用して、PL/SQLタイプを作成します。PL/SQLタイプはパッケージ内に定義する必要があり、単独では存在できません。
PL/SQLタイプを使用すると、コレクション・タイプ、レコード・タイプおよびREFカーソル・タイプをWarehouse Builderに作成できます。PL/SQLタイプは、サブプログラムのパラメータとして、またはファンクションに対する戻り型として使用します。PL/SQLタイプをサブプログラムに対するパラメータとして使用すると、任意の数の要素を処理できます。バルクSQLを使用してデータベース表との間でデータを移動するには、コレクション・タイプを使用します。PL/SQLタイプの詳細は、Oracle Database PL/SQL言語リファレンスを参照してください。
Warehouse Builderを使用すると、次のPL/SQLタイプを作成できます。
PL/SQLレコード・タイプ
レコード・タイプを使用すると、パッケージにレコードを定義できます。レコードとは、複数のフィールドを持つ複合データ構造です。各フィールドのデータ型は異なる場合があります。関連する項目を保持し、その項目を単一のパラメータを使用してサブプログラムに渡すには、レコードを使用します。
たとえば、EMPLOYEE
レコードには、ID、姓、名前、住所、誕生日、雇用日、給与など、従業員に関連する詳細を格納できます。EMPLOYEE
レコードに基づいてレコード・タイプを作成し、そのレコード・タイプを使用してサブプログラム間で従業員データを渡すことができます。
REFカーソル・タイプ
REFカーソル・タイプを使用すると、パッケージ内にREFカーソルを定義できます。REFカーソルは単一の問合せにバインドされず、異なる複数の結果セットを指し示すことができます。REFカーソルは、あるサブプログラムで問合せを実行し、その結果を別のサブプログラムで処理する場合に使用します。また、REFカーソルを使用すると、問合せの結果セットを、PL/SQLが格納されたサブプログラムと様々なクライアント(OCIクライアントやOracle Formsアプリケーションなど)との間で渡すことができます。
REFカーソルは、すべてのPL/SQLクライアントで使用できます。たとえば、REFカーソルをPL/SQLホスト環境(OCIやPro*Cプログラム・クライアントなど)で宣言し、そのREFカーソルを入力ホスト変数(バインド変数)としてPL/SQLに渡すことができます。PL/SQLエンジンを持つOracle Formsなどのアプリケーション開発ツールでは、クライアント側全体でカーソル変数を使用できます。また、リモート・プロシージャ・コールを介して、カーソル変数をクライアントとデータベース・サーバーとの間で受け渡すことができます。
ネストした表のタイプ
ネストした表のタイプを使用して、パッケージ内のネストした表を定義します。ネストした表は順序を設定していない要素セットで、すべてが同じデータ型です。要素数が宣言されていない1つのディメンション配列に類似しています。要素が表であるネストした表を作成して多次元配置をモデル化できます。
たとえば、任意の数の従業員IDを保持できるネストした表のタイプを作成できます。このネストした表のタイプは、ネストした表のタイプに含まれる従業員レコードのみを処理するサブプログラムにパラメータとして渡すことができます。
SALES
表には、全世界に事業所を持つ組織の毎日の売上が格納されます。この表には、売上ID、売上日、顧客ID、製品ID、売上金額、売上数量、および売上の計上に使用した通貨が含まれます。経営側は、指定期間内の全世界の売上を単一の通貨(たとえばUSドル)で分析することを望んでいます。このため、すべての売上値をUSドルに換算する必要があります。通貨換算レートは毎日変化する可能性があるため、売上金額は、売上日における売上通貨の換算レートを使用して計算する必要があります。
PL/SQLレコード・タイプを使用したソリューション
図19-2に、PL/SQLレコード・タイプを使用して指定した通貨での売上金額の取得に使用するマッピングが表示されます。
このマッピングでは、様々な通貨で格納された個々の売上データを基に、指定通貨での売上値を取得し、このデータをターゲット表にロードします。このマッピングを作成する手順は、次のとおりです。
グローバル・エクスプローラで、パッケージを作成します。このパッケージにCURR_CONV_PROC
というプロシージャを作成します。
このプロシージャは、指定期間内に毎日Webサイトから通貨換算値を取得します。このプロシージャの入力パラメータは、売上通貨、売上値を換算する必要のある通貨、および通貨換算が必要な期間です。このデータは、タイプCURR_CONV_REC
のPL/SQLレコード・タイプに格納されます。このレコード・タイプは、日付と変換値の2つの属性を含んでいます。
PL/SQLレコード・タイプはパッケージの一部として作成します。
変換演算子を含むマッピングを作成します。この演算子は、CURR_CONV_PROC
プロシージャにバインドされます。
マッピング入力パラメータ演算子を使用して、変換演算子の入力パラメータの値を指定します。
変換演算子の出力グループは、タイプCURR_CONV_REC
のPL/SQLレコード・タイプです。
オブジェクトの拡張演算子を使用して、このレコード・タイプに格納された個々の値を取得し、表CURRENCY_TAB
に格納します。
アグリゲータ演算子を使用して、各注文書の売上詳細を集計します。
SALES
表はトランザクション表であり、データを正規化形式で格納します。各注文書の集計売上を取得するには、アグリゲータ演算子を使用して売上データを集計します。
ジョイナ演算子を使用して、集計後の売上詳細を結合します。この集計後の売上詳細は、CURRENCY_TAB
表のデータを使用したアグリゲータ演算子の出力です。売上日が結合条件として使用されます。
式演算子を使用して売上金額と通貨換算レートを乗算し、必要な通貨での売上合計を取得します。換算後の売上データをCONV_SALES_TAB
表にロードします。
PL/SQLタイプは、デザイン・センターのプロジェクト・エクスプローラまたはグローバル・エクスプローラで作成できます。 PL/SQLタイプの作成の詳細は、「PL/SQLタイプの定義」を参照してください。
PL/SQLタイプを作成するには、PL/SQLタイプの作成ウィザードを使用します。ウィザードに表示される指示に従って次の各ページを完了します。
名前と説明ページを使用して、PL/SQLタイプの名前を入力し、必要に応じて説明も入力します。また、このページを使用して、作成するPL/SQLタイプのタイプを選択します。
次のいずれかのPL/SQLタイプを作成できます。
PL/SQLレコード・タイプ
REFカーソル・タイプ
NESTED TABLE型
PL/SQLタイプの詳細は、PL/SQLタイプについてを参照してください。
名前を指定し、作成するPL/SQLタイプのタイプを選択した後、「次へ」をクリックします。
属性ページを使用して、PL/SQLレコード・タイプの属性を定義します。PL/SQLレコード・タイプの属性のみを指定します。PL/SQLレコードには、少なくとも1つの属性が必要です。
属性ごとに、次の内容を定義します。
名前: 属性の名前。レコード・タイプ内で一意である必要があります。
タイプ: 属性のデータ型。リストからデータ型を選択します。
長さ: データ型の長さ(文字データ型の場合)。
精度: 属性に使用できる合計桁数(数値データ型の場合)。
スケール: 小数点以下の合計桁数(数値データ型の場合)。
秒精度: 日時フィールドの小数部の桁数。0から9までの数値を入力できます。「秒精度」は、TIMESTAMP
データ型に対してのみ使用されます。
「次へ」をクリックして次の手順に進みます。
戻り型ページを使用して、PL/SQLタイプの戻り型を選択します。REFカーソルおよびネストした表を作成する場合は、戻り型を指定する必要があります。
REFカーソルを定義する手順は、次のとおりです。
REFカーソルの戻り型は、PL/SQLレコード・タイプのみです。PL/SQLレコード・タイプの名前がわかっている場合は、「検索」フィールドに名前を入力し、「実行」をクリックして検索できます。
「検索」フィールドの下のエリアに使用可能なPL/SQLタイプが表示されます。これらのPL/SQLタイプは、「パブリック」と「プライベート」の2つのノードにグループ化されます。「パブリック」ノードを開いて、Oracle共有ライブラリに含まれているPL/SQLタイプを表示します。このタイプは、パッケージ名別にグループ化されます。「プライベート」ノードには、Oracleモジュール内のパッケージの一部として作成されるPL/SQLタイプが含まれています。現在のプロジェクトに属しているPL/SQLタイプのみが表示されます。各Oracleモジュールはノードで表されます。モジュール内では、PL/SQLタイプは属しているパッケージごとにグループ化されます。
ネストした表を定義する手順は、次のとおりです。
ネストした表の場合、戻り型はスカラー・データ型またはPL/SQLレコード・タイプになります。PL/SQLタイプによって戻される型に基づいて、次のオプションのいずれかを選択します。
戻り型としてスカラー型を選択します。
このオプションを使用すると、スカラー型を戻すPL/SQLタイプを作成できます。リストを使用してデータ型を選択します。
戻り型としてPL/SQLレコード・タイプを選択します。
このオプションを使用すると、PL/SQLレコード・タイプを戻すPL/SQLタイプを作成できます。戻されるPL/SQLレコード・タイプの名前がわかっている場合は、「検索」フィールドにその名前を入力して「実行」をクリックします。検索結果がオプションの下のエリアに表示されます。
表示される使用可能なタイプのリストから戻り型を選択することもできます。このオプションの下のエリアには、「パブリック」と「プライベート」の2つのノードがあります。「パブリック」ノードには、Oracle共有ライブラリの一部であるPL/SQLレコード・タイプが含まれています。PL/SQLレコード・タイプは、属しているパッケージ別にグループ化されます。「プライベート」ノードには、現在のプロジェクト内で各Oracleモジュールの変換として作成されるPL/SQLレコード・タイプが含まれています。このPL/SQLレコード・タイプは、モジュール別にグループ化されます。PL/SQLタイプによって戻されるPL/SQLレコード・タイプを選択します。
「次へ」をクリックして、PL/SQLタイプの作成に進みます。
サマリー・ページには、ウィザードの各ページで選択したオプションが表示されます。オプションを確認してください。オプションを変更するには、「戻る」をクリックします。「終了」をクリックすると、PL/SQLタイプが作成されます。
カスタム変換の定義は、エディタを使用して編集できます。プロパティの編集は常に一貫して行ってください。たとえば、パラメータの名前を変更した場合は、実行コード内の名前も変更する必要があります。
「ファンクションの編集」ダイアログ・ボックスを使用すると、ファンクション定義を編集できます。プロシージャ定義を編集するには、「プロシージャの編集」ダイアログ・ボックスを使用します。
ファンクション、プロシージャまたはパッケージを編集する手順は、次のとおりです。
プロジェクト・エクスプローラから、変換が作成されているOracleモジュールを開きます。次に、「変換」ノードを開きます。
グローバル共有ライブラリに含まれる変換を編集するには、グローバル・エクスプローラから「パブリック変換」ノードを開き、次に「カスタム」ノードを開きます。
編集するファンクション、プロシージャまたはパッケージの名前を右クリックして、「エディタを開く」を選択します。
ファンクションまたはプロシージャの場合、「ファンクションの編集」ダイアログ・ボックスまたは「プロシージャの編集」ダイアログ・ボックスが表示されます。次のタブを使用して、ファンクションまたはプロシージャの定義を編集します。
パッケージの場合、「変換ライブラリの編集」ダイアログ・ボックスが表示されます。編集できるのは、パッケージの名前と説明のみです。パッケージ内に含まれるファンクションおよびプロシージャは、ファンクションまたはプロシージャの編集に使用する手順で編集できます。
「名前」タブを使用して、ファンクションまたはプロシージャの名前と説明を編集します。ファンクションの場合、データの戻り型も編集できます。
「パラメータ」タブを使用して、ファンクションまたはプロシージャの新規パラメータを編集、追加または削除します。また、パラメータの属性を編集および定義できます。「パラメータ」タブの内容は、変換の作成ウィザード: パラメータ・ページの内容と同じです。パラメータ・ページの内容の詳細は、「パラメータ・ページ」を参照してください。
「実装」タブを使用して、ファンクションまたはプロシージャのPL/SQLコードを確認します。「コード・エディタ」をクリックしてコードを編集します。「実装」タブの内容は、変換の作成ウィザード: 実装ページの内容と同じです。実装ページの内容の詳細は、「実装ページ」を参照してください。
PL/SQLタイプの編集ダイアログ・ボックスを使用すると、PL/SQLタイプの定義を編集できます。PL/SQLタイプを編集する手順は、次のとおりです。
プロジェクト・エクスプローラから、PL/SQLタイプを含むOracleモジュールを開きます。次に、「変換」ノードを開きます。
グローバル共有ライブラリに格納されているPL/SQLタイプを編集するには、グローバル・エクスプローラで「パブリック変換」 ノードを開き、次に「カスタム」ノードを開きます。
PL/SQLタイプを含むパッケージを開き、次に「PL/SQLタイプ」ノードを開きます。
編集するPL/SQLタイプの名前を右クリックして、「エディタを開く」を選択します。
PL/SQLタイプの編集ダイアログ・ボックスが表示されます。次のタブを使用して、PL/SQLタイプを編集します。
「名前」タブには、PL/SQLタイプの名前と説明が表示されます。このタブを使用して、PL/SQLタイプの名前または説明を編集します。
PL/SQLタイプの名前を変更するには、名前を選択して新しい名前を入力します。
「属性」タブには、PL/SQLレコード・タイプの既存の属性の詳細が表示されます。このタブは、PL/SQLレコード・タイプに対してのみ表示されます。既存の属性を変更、新規属性を追加または属性を削除できます。
新規属性を追加するには、空白行の「名前」列をクリックして属性の詳細を指定します。属性を削除するには、属性を表す行の左側にあるグレーのセルを右クリックし、「削除」を選択します。
「戻り型」タブを使用して、PL/SQLタイプの戻り型の詳細を変更します。REFカーソル・タイプの場合、戻り型はPL/SQLレコードです。ネストした表の場合、戻り型はPL/SQLレコード・タイプまたはスカラー・データ型になります。
管理変換により事前構築ファンクションが提供され、ETLプロセスで定期的に実行されるアクションを実行します。これらの変換は主に、DBA関連領域、またはパフォーマンスの向上にフォーカスがおかれています。たとえば、表をロードする際に制約を無効化して、ロードが完了した後に再度有効化するのが一般的です。
Warehouse Builderの管理変換は、カスタム・ファンクションです。Warehouse Builderが提供する管理変換は、次のとおりです。
構文
WB_ABORT(p_code, p_message)
p_code
は停止コードで、-20000から-29999の範囲です。また、p_message
は、ユーザーが指定する停止メッセージです。
目的
WB_ABORT
を使用すると、Warehouse Builderコンポーネントからアプリケーションを終了できます。マッピング後プロセスから、またはマッピング内の変換として、これを実行できます。
例
この管理ファンクションを使用して、アプリケーションを終了します。マッピングにエラーがある場合、マッピング後プロセスでこのファンクションを使用して配布を終了できます。
構文
WB_COMPILE_PLSQL(p_name, p_type)
p_name
はコンパイルされるオブジェクトの名前です。p_type
は、コンパイルされるオブジェクトのタイプです。有効なタイプは次のとおりです。
'PACKAGE' 'PACKAGE BODY' 'PROCEDURE' 'FUNCTION' 'TRIGGER'
目的
このプログラム・ユニットは、データベースに格納されているオブジェクトをコンパイルします。
例
次の例では、add_employee_proc
というプロシージャをコンパイルすると仮定します。
EXECUTE WB_COMPILE_PLSQL('ADD_EMPLOYEE_PROC', 'PROCEDURE');
構文
WB_DISABLE_ALL_CONSTRAINTS(p_name)
p_name
は制約が無効化される表の名前です。
目的
このプログラム・ユニットは、プログラム・コールで指定した、表によって所有されるすべての制約を無効化します。
データ・セットをより迅速にロードするため、表の制約を無効化できます。これでデータは検証されずにロードされます。これは主として比較的クリーンなデータ・セットについて行われます。
例
次の例では、表OE.CUSTOMERS
の制約の無効化を示しています。
SELECT constraint_name , DECODE(constraint_type,'C','Check','P','Primary') Type , status FROM user_constraints WHERE table_name = 'CUSTOMERS';
CONSTRAINT_NAME TYPE STATUS ------------------------------ ------- -------- CUST_FNAME_NN Check ENABLED CUST_LNAME_NN Check ENABLED CUSTOMER_CREDIT_LIMIT_MAX Check ENABLED CUSTOMER_ID_MIN Check ENABLED CUSTOMERS_PK Primary ENABLED
すべての制約を無効化するには、SQL*PlusまたはWarehouse Builderで次を実行します。
EXECUTE WB_DISABLE_ALL_CONSTRAINTS('CUSTOMERS'); CONSTRAINT_NAME TYPE STATUS ------------------------------ ------- -------- CUST_FNAME_NN Check DISABLED CUST_LNAME_NN Check DISABLED CUSTOMER_CREDIT_LIMIT_MAX Check DISABLED CUSTOMER_ID_MIN Check DISABLED CUSTOMERS_PK Primary DISABLED
注意: この文では、カスケード・オプションを使用して、キーの無効化によって依存性を解除できます。 |
構文
WB_DISABLE_ALL_TRIGGERS(p_name)
p_name
はトリガーが無効化される表の名前です。
目的
このプログラム・ユニットは、プログラム・コールで指定した表によって所有されるすべてのトリガーを無効化します。表の所有者は、現行ユーザー(変数USER)である必要があります。このアクションはトリガーを停止し、パフォーマンスを向上します。
例
次の例では、表OE.OC_ORDERS
のすべてのトリガーの無効化を示しています。
SELECT trigger_name , status FROM user_triggers WHERE table_name = 'OC_ORDERS'; TRIGGER_NAME STATUS ------------------------------ -------- ORDERS_TRG ENABLED ORDERS_ITEMS_TRG ENABLED
表OC_ORDERS
のすべてのトリガーを無効化するには、SQL*PlusまたはWarehouse Builderで次を実行します。
EXECUTE WB_DISABLE_ALL_TRIGGERS ('OC_ORDERS');
TRIGGER_NAME STATUS ------------------------------ -------- ORDERS_TRG DISABLED ORDERS_ITEMS_TRG DISABLED
構文
WB_DISABLE_CONSTRAINT(p_constraintname, p_tablename)
p_constraintname
は、無効化される制約名です。p_tablename
は、指定した制約が定義される表の名前です。
目的
このプログラム・ユニットは、プログラム・コールで指定した表によって所有される指定された制約を無効化します。ユーザーは現行ユーザー(変数USER
)です。
データ・セットをより迅速にロードするため、表の制約を無効化できます。これで、データは検証されずにロードされます。これによりオーバーヘッドが削減されます。これは主として比較的クリーンなデータ・セットについて行われます。
例
次の例では、表OE.CUSTOMERS
の指定された制約の無効化を示しています。
SELECT constraint_name , DECODE(constraint_type , 'C', 'Check' , 'P', 'Primary' ) Type , status FROM user_constraints WHERE table_name = 'CUSTOMERS'; CONSTRAINT_NAME TYPE STATUS ------------------------------ ------- -------- CUST_FNAME_NN Check ENABLED CUST_LNAME_NN Check ENABLED CUSTOMER_CREDIT_LIMIT_MAX Check ENABLED CUSTOMER_ID_MIN Check ENABLED CUSTOMERS_PK Primary ENABLED
指定された制約を無効化するには、SQL*PlusまたはWarehouse Builderで次を実行します。
EXECUTE WB_DISABLE_CONSTRAINT('CUSTOMERS_PK','CUSTOMERS'); CONSTRAINT_NAME TYPE STATUS ------------------------------ ------- -------- CUST_FNAME_NN Check ENABLED CUST_LNAME_NN Check ENABLED CUSTOMER_CREDIT_LIMIT_MAX Check ENABLED CUSTOMER_ID_MIN Check ENABLED CUSTOMERS_PK Primary DISABLED
注意: この文では、カスケード・オプションを使用して、キーの無効化によって依存性を解除できます。 |
構文
WB_DISABLE_TRIGGER(p_name)
p_name
は無効化されるトリガー名です。
目的
このプログラム・ユニットは、指定されたトリガーを無効化します。トリガーの所有者は現行ユーザー(変数USER)である必要があります。
例
次の例では、表OE.OC_ORDERS
のトリガーの無効化を示しています。
SELECT trigger_name, status FROM user_triggers WHERE table_name = 'OC_ORDERS'; TRIGGER_NAME STATUS ------------------------------ -------- ORDERS_TRG ENABLED ORDERS_ITEMS_TRG ENABLED
指定された制約を無効化するには、SQL*PlusまたはWarehouse Builderで次を実行します。
ECECUTE WB_DISABLE_TRIGGER ('ORDERS_TRG'); TRIGGER_NAME STATUS ------------------------------ -------- ORDERS_TRG DISABLED ORDERS_ITEMS_TRG ENABLED
構文
WB_ENABLE_ALL_CONSTRAINTS(p_name)
p_name
は、すべての制約を有効化する必要がある表の名前です。
目的
このプログラム・ユニットは、プログラム・コールで指定した表によって所有されるすべての制約を有効化します。
データ・セットをより迅速にロードするため、表の制約を無効化できます。データをロードした後、このプログラム・ユニットを使用してこれらの制約を再び有効化する必要があります。
例
次の例では、表OE.CUSTOMERSの制約の有効化を示しています。
SELECT constraint_name , DECODE(constraint_type
, 'C', 'Check' , 'P', 'Primary) Type , status
FROM user_constraints WHERE table_name = 'CUSTOMERS'; CONSTRAINT_NAME TYPE STATUS ------------------------------ ------- -------- CUST_FNAME_NN Check DISABLED CUST_LNAME_NN Check DISABLED CUSTOMER_CREDIT_LIMIT_MAX Check DISABLED CUSTOMER_ID_MIN Check DISABLED CUSTOMERS_PK Primary DISABLED
すべての制約を有効化するには、SQL*PlusまたはWarehouse Builderで次を実行します。
EXECUTE WB_ENABLE_ALL_CONSTRAINTS('CUSTOMERS'); CONSTRAINT_NAME TYPE STATUS ------------------------------ ------- -------- CUST_FNAME_NN Check ENABLED CUST_LNAME_NN Check ENABLED CUSTOMER_CREDIT_LIMIT_MAX Check ENABLED CUSTOMER_ID_MIN Check ENABLED CUSTOMERS_PK Primary ENABLED
構文
WB_ENABLE_ALL_TRIGGERS(p_name)
p_name
はトリガーが有効化される表の名前です。
目的
このプログラム・ユニットは、プログラム・コールで指定した表によって所有されるすべてのトリガーを有効化します。表の所有者は、現行ユーザー(変数USER)である必要があります。
例
次の例では、表OE.OC_ORDERS
のすべてのトリガーの有効化を示しています。
SELECT trigger_name , status FROM user_triggers WHERE table_name = 'OC_ORDERS'; TRIGGER_NAME STATUS ------------------------------ -------- ORDERS_TRG DISABLED ORDERS_ITEMS_TRG DISABLED
表OE.OC_ORDERS
に定義されたすべてのトリガーを有効化するには、SQL*PlusまたはWarehouse Builderで次を実行します。
EXECUTE WB_ENABLE_ALL_TRIGGERS ('OC_ORDERS'); TRIGGER_NAME STATUS ------------------------------ -------- ORDERS_TRG ENABLED ORDERS_ITEMS_TRG ENABLED
構文
WB_ENABLE_CONSTRAINT(p_constraintname, p_tablename)
p_constraintname
は無効化される制約名です。また、p_tablename
は指定した制約が定義される表の名前です。
目的
このプログラム・ユニットは、プログラム・コールで指定した表によって所有される指定された制約を有効化します。ユーザーは現行ユーザー(変数USER
)です。データ・セットをより迅速にロードするため、表の制約を無効化できます。ロードが完了した後、これらの制約を再び有効化する必要があります。このプログラム・ユニットは制約を個別に有効化する方法を示します。
例
次の例は、表OE.CUSTOMERS
の指定された制約の有効化を示しています。
SELECT constraint_name , DECODE(constraint_type , 'C', 'Check' , 'P', 'Primary' ) Type , status FROM user_constraints WHERE table_name = 'CUSTOMERS'; CONSTRAINT_NAME TYPE STATUS ------------------------------ ------- -------- CUST_FNAME_NN Check DISABLED CUST_LNAME_NN Check DISABLED CUSTOMER_CREDIT_LIMIT_MAX Check DISABLED CUSTOMER_ID_MIN Check DISABLED CUSTOMERS_PK Primary DISABLED
指定された制約を有効化するには、SQL*PlusまたはWarehouse Builderで次を実行します。
EXECUTE WB_ENABLE_CONSTRAINT('CUSTOMERS_PK', 'CUSTOMERS'); CONSTRAINT_NAME TYPE STATUS ------------------------------ ------- -------- CUST_FNAME_NN Check DISABLED CUST_LNAME_NN Check DISABLED CUSTOMER_CREDIT_LIMIT_MAX Check DISABLED CUSTOMER_ID_MIN Check DISABLED CUSTOMERS_PK Primary ENABLED
構文
WB_ENABLE_TRIGGER(p_name)
p_name
は、有効化するトリガー名です。
目的
このプログラム・ユニットは、指定したトリガーを有効化します。トリガーの所有者は、現行ユーザー(変数USER
)である必要があります。
例
次の例では、表OE.OC_ORDERS
でのトリガーの有効化を示します。
SELECT trigger_name , status FROM user_triggers WHERE table_name = 'OC_ORDERS'; TRIGGER_NAME STATUS ------------------------------ -------- ORDERS_TRG DISABLED ORDERS_ITEMS_TRG ENABLED
指定された制約を有効化するには、SQL*PlusまたはWarehouse Builderで次を実行します。
EXECUTE WB_ENABLE_TRIGGER ('ORDERS_TRG'); TRIGGER_NAME STATUS ------------------------------ -------- ORDERS_TRG ENABLED ORDERS_ITEMS_TRG ENABLED
構文
WB_TRUNCATE_TABLE(p_name)
p_name
は、切り捨てる表名です。
目的
このプログラム・ユニットは、コマンド・コールで指定した表を切り捨てます。トリガーの所有者は、現行ユーザー(変数USER
)である必要があります。このコマンドは、すべての参照制約を無効化および再有効化し、表の切捨てコマンドを有効化します。このコマンドをマッピング前プロセスで使用してステージング表を明示的に切り捨て、このステージング表のすべてのデータが新しくロードされたデータになるようにします。
例
次の例では、表OE.OC_ORDERS
の切捨てを示します。
SELECT COUNT(*) FROM oc_orders; COUNT(*) ---------- 105
指定された制約を有効化するには、SQL*PlusまたはWarehouse Builderで次を実行します。
EXECUTE WB_TRUNCATE_TABLE ('OC_ORDERS'); COUNT(*) ---------- 0
文字変換によりWarehouse Builderユーザーは、文字オブジェクトで変換を実行できます。Warehouse Builderに用意されているカスタム・ファンクションには、接頭辞WB_
が付いています。
カスタム変換には、基本的なOracle Database SQLファンクションまたはプロシージャと、Warehouse Builderのカスタム変換の実装が含まれます。
表19-1に、Database SQLファンクションを利用した文字変換を示します。これは縦欄式の表で、領域を節約するため左から右に列が整列して表示されています。これらの変換の説明および例は、Oracle Database SQL言語リファレンスで文字ファンクションに関するセクションを参照してください。
表19-1 SQL文字ファンクションを利用した文字変換
文字変換名 | 文字変換名(続き) | 文字変換名(続き) |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
次に、カスタム文字変換のリストを示します。
構文
WB.LOOKUP_CHAR (table_name , column_name , key_column_name , key_value )
table_name
は参照を実行する表の名前で、column_name
は、参照結果などで戻されるVARCHAR2
列の名前です。たとえば、key_column_name
の参照結果は、参照表で照合するキーとして使用されるNUMBER
列の名前です。key_value
は、照合を実行するkey_column_name
にマッピングされるキー列の値です。
目的
照合キーとしてNUMBER
列を使用し、数値でキー参照を実行して、データベース表からVARCHAR2
値を戻します。
例
参照表LKP1として、次の表を使用するとします。
KEY_COLUMN TYPE COLOR 10 Car Red 20 Bike Green
次のようなコールで、このパッケージを使用します。
WB.LOOKUP_CHAR ('LKP1' , 'TYPE' , 'KEYCOLUMN' , 20 )
この場合は、この変換の出力として値「Bike」が戻されます。この出力は、インライン・ファンクション・コールの結果として、マッピングで処理されます。
注意: このファンクションは、行ベースのキー参照です。セット・ベースの参照は、参照演算子を使用した場合にサポートされます。 |
構文
WB.LOOKUP_CHAR (table_name , column_name , key_column_name , key_value )
table_name
は参照を実行する表の名前で、column_name
は参照結果などで戻されるVARCHAR2
列の名前です。key_column_name
は、参照表で照合するキーとして使用されるVARCHAR2
列の名前です。key_value
は、照合を実行するkey_column_name
にマッピングされる値などのキー列の値です。
目的
照合キーとしてVARCHAR2
列を使用し、VARCHAR2
の文字でキー参照を実行して、データベース表からVARCHAR2
値を戻します。
例
次の表を参照表LKP1
として使用します。
KEYCOLUMN TYPE COLOR ACV Car Red ACP Bike Green
次のようなコールで、このパッケージを使用します。
WB.LOOKUP_CHAR ('LKP1' , 'TYPE' , 'KEYCOLUMN' , 'ACP' )
この場合は、この変換の出力として値「Bike」が戻されます。この出力は、インライン・ファンクション・コールの結果として、マッピングで処理されます。
注意: このファンクションは、行ベースのキー参照です。セット・ベースの参照は、参照演算子を使用した場合にサポートされます。 |
コントロール・センター変換をプロセス・フローまたはカスタム変換で使用すると、実行時にコントロール・センターに関する情報にアクセスできます。たとえば、推移に関する式にコントロール・センター変換を使用すると、実行時にプロセス・フローを使用してフローを制御しやすくなります。また、カスタム・ファンクションの中でコントロール・センター変換を使用することもできます。そしてそのカスタム・ファンクションをプロセス・フローの設計に使用できます。
すべてのコントロール・センター変換には、コントロール・センター・ワークスペースに格納された監査データへのハンドルとなる監査IDが必要です。監査IDは、パブリック・ビューALL_RT_AUDIT_EXECUTIONS
へのキーです。この変換を使用して、実行時にその監査ID固有のデータを取得できます。プロセス・フローのコンテキストで実行すると、プロセス・フロー式で擬似変数audit_id
を使用して、実行時に監査IDを取得できます。この変数は、現在実行中のジョブの監査IDとして評価されます。たとえば、マップ入力パラメータの場合はマップの実行を表し、推移の場合は推移元のジョブを表します。
コントロール・センター変換は、次のとおりです。
構文
WB_RT_GET_ELAPSED_TIME(audit_id)
目的
このファンクションは、指定されたaudit_id
で与えられたジョブの実行の経過時間を秒単位で戻します。指定された監査IDが存在しない場合は、NULLを戻します。たとえば、前のアクティビティの所要時間に応じて選択する場合、このファンクションを推移に使用できます。
例
次の例では、audit_id
で表されるアクティビティが開始されてから経過した時間を戻します。
declare audit_id NUMBER := 1812; l_time NUMBER; begin l_time:= WB_RT_GET_ELAPSED_TIME(audit_id); end;
構文
WB_RT_GET_JOB_METRICS(audit_id, no_selected, no_deleted, no_updated, no_inserted, no_discarded, no_merged, no_corrected)
ジョブの実行時において、no_selected
は選択された行数、no_deleted
は削除された行数、no_updated
は更新された行数、no_inserted
は挿入された行数、no_discarded
は破棄された行数、no_merged
はマージされた行数、no_corrected
は修正された行数を表します。
目的
このプロシージャは、指定されたaudit_id
で表されるジョブ実行のメトリックを戻します。このメトリックには、選択、削除、更新、挿入、破棄、マージおよび修正された行の数があります。
例
次の例では、audit_id
で表される監査IDのジョブ・メトリックを取得します。
declare audit_id NUMBER := 16547; l_nselected NUMBER; l_ndeleted NUMBER; l_nupdated NUMBER; l_ninserted NUMBER; l_ndiscarded NUMBER; l_nmerged NUMBER; l_ncorrected NUMBER; begin WB_RT_GET_JOB_METRICS(audit_id, l_nselected, l_ndeleted, l_nupdated, l_ninserted, l_ndiscarded, l_nmerged, l_ncorrected); dbms_output.put_line('sel=' || l_nselected || ', del=' l_ndeleted || ', upd=' || l_nupdated); dbms_output.put_line('ins='|| l_ninserted || ' , dis=' || l_ndiscarded ); dbms_output.put_line('mer=' || l_nmerged || ', cor=' ||l_ncorrected); end;
構文
WB_RT_GET_LAST_EXECUTION_TIME(objectName, objectType, objectLocationName)
objectName
はオブジェクト名、objectType
はオブジェクトのタイプ(MAPPING、DATA_AUDITOR、PROCESS_FLOW、SCHEDULABLEなど)、objectLocationName
はオブジェクトが配布される場所を表します。
目的
この変換により、時間ベースのデータにアクセスできます。一般的には、これはプロセス・フローで使用して、時間に関連する設計の側面をモデル化します。たとえば、前回の実行から2日以上経過した場合に別のマップを実行できるように、パスを設計できます。
また、この変換を使用して、同時に実行される複数のプロセス・フローで、時間の同期化を決定することもできます。たとえば、別のプロセス・フローが完了しているかどうかに従って、プロセス・フローのパスを選択できます。
例
次の例では、TIMES_MAPのマッピングが前回実行された日時を取得し、if条件によって、その日時から現在までの経過時間が1日以内かどうかを判定します。この日時に基づいて、別のアクションを実行できます。
declare last_exec_time DATE; begin last_exec_time:=WB_RT_GET_LAST_EXECUTION_TIME('TIMES_MAP','MAPPING','WH_LOCATION'); if last_exec_time < sysdate - 1 then -- last-execution was more than one day ago -- provide details of action here NULL; Else -- provide details of action here NULL; end if; end;
構文
WB_RT_GET_MAP_RUN_AUDIT(audit_id)
目的
このファンクションは、マップ・アクティビティを表すジョブ実行用のマップ実行IDを戻します。audit_id
がマップのジョブ実行を表すものでない場合は、NULLを戻します。たとえば、戻されたIDをキーとして使用し、ALL_RT_MAP_RUN_<name
>ビューにアクセスして詳細情報を取得できます。
例
次の例では、監査IDが67265であるジョブ実行用のマップ実行IDを取得します。このマップ実行IDを使用して、ALL_RT_MAP_RUN_EXECUTIONSパブリック・ビューからソースの名前を取得します。
declare audit_id NUMBER := 67265; l_sources VARCHAR2(256); l_run_id NUMBER; begin l_run_id := WB_RT_GET_MAP_RUN_AUDIT_ID(audit_id); SELECT source_name INTO l_sources FROM all_rt_map_run_sources WHERE map_run_id = l_run_id; end;
構文
WB_RT_GET_NUMBER_OF_ERRORS(audit_id)
目的
このファンクションは、指定されたaudit_id
で与えられたジョブ実行で記録されたエラーの数を戻します。特定のaudit_id
が見つからない場合は、NULLを戻します。
例
次の例では、監査IDが8769のジョブ実行で生成されたエラーの数を取得します。このエラー数に応じて、異なるアクションを実行できます。
declare audit_id NUMBER := 8769; l_errors NUMBER;begin l_errors := WB_RT_GET_NUMBER_OF_ERRORS(audit_id); if l_errors < 5 then ..... else ..... end if; end;
構文
WB_RT_GET_NUMBER_OF_WARNINGS(audit_id)
目的
このファンクションは、audit_id
で表されるジョブ実行で記録された警告の数を戻します。audit_id
が存在しない場合は、NULLを戻します。
例
次の例では、監査IDが54632のジョブ実行で生成された警告の数を戻します。この警告の数に応じて、異なるアクションを実行できます。
declare audit_is NUMBER := 54632; l_warnings NUMBER;begin l_ warnings:= WB_RT_GET_NUMBER_OF_WARNINGS (audit_id); if l_warnings < 5 then ..... else ..... end if; end;
構文
WB_RT_GET_PARENT_AUDIT_ID(audit_id)
目的
このファンクションは、audit_idで表されるジョブ実行を保有するプロセスの監査IDを戻します。audit_idが存在しない場合は、NULLを戻します。戻された監査IDは、ALL_RT_AUDIT_EXECUTIONSなど、他のパブリック・ビューへのキーとして使用したり、詳細な情報が必要な場合は他のコントロール・センター変換に使用できます。
例
次の例では、監査IDが76859のジョブ実行用の親監査IDを取得します。この監査IDを使用して、親アクティビティの経過時間を判断できます。親アクティビティの経過時間に応じて、異なるアクションを実行できます。
declare audit_id NUMBER := 76859; l_elapsed_time NUMBER; l_parent_id NUMBER; begin l_parent_id := WB_RT_GET_PARENT_AUDIT_ID(audit_id); l_elapsed_time := WB_RT_GET_ELAPSED_TIME(l_parent_id); if l_elpased_time < 100 then ..... else ..... end if; end;
構文
WB_RT_GET_RETURN_CODE(audit_id)
目的
このファンクションは、audit_id
で表されるジョブ実行で記録されたリターン・コードを戻します。audit_id
が存在しない場合は、NULLを戻します。ジョブの実行が正常に終了すると、リターン・コードは0以上になります。リターン・コードが0未満の場合は、ジョブの実行が失敗したことを意味します。
例
次の例では、監査IDがaudit_id
で表されるジョブ実行のリターン・コードを取得します。
declare audit_id NUMBER:=69; l_code NUMBER;begin l_code:= WB_RT_GET_RETURN_CODE(audit_id);end;
構文
WB_RT_GET_START_TIME(audit_id)
目的
このファンクションは、audit_id
で表されるジョブ実行の開始時間を戻します。audit_id
が存在しない場合は、NULLを戻します。たとえば、前のアクティビティの開始時間に応じて選択する場合、これを推移に使用できます。
例
次の例では、監査IDが354のジョブ実行の開始時間を判断します。
declare audit_id NUMBER:=354; l_date TIMESTAMP WITH TIMEZONE;begin l_date := WB_RT_GET_START_TIME(audit_id);end;
Warehouse Builderユーザーは、変換の変換により、値の条件付き変換が可能なファンクションを実行できます。これらのファンクションでは、SQL内でif-then構成が実行されます。
Warehouse Builderの変換は、Oracle Database SQLの変換ファンクションで実装されています。これらの変換の説明および例は、Oracle Database SQL言語リファレンスの「文字変換」を参照してください。
ASCIISTR
COMPOSE
CONVERT
HEXTORAW
NUMTODSINTERVAL
NUMTOYMINTERVAL
RAWTOHEX
RAWTONHEX
SCN_TO_TIMESTAMP
TIMESTAMP_TO_SCN
TO_BINARY_DOUBLE
TO_BINARY_FLOAT
TO_CHAR(文字)、TO_CHAR(日時)、TO_CHAR(数値)
TO_CLOB
TO_DATE
TO_DSINTERVAL
TO_MULTIBYTE
TO_NCHAR(文字)、TO_NCHAR(日時)、TO_NCHAR(数値)
TO_NCLOB
TO_NUMBER
TO_SINGLE_BYTE
TO_TIMESTAMP
TO_TIMESTAMP_TZ
TO_YMINTERVAL
UNISTR
Warehouse Builderユーザーは、日付変換により、日付属性で変換を実行できます。これらの変換には、Warehouse Builderが実装するSQLファンクションと、Warehouse Builderが提供するカスタム・ファンクションがあります。カスタム・ファンクションはすべてWB_<function name>
の形式になっています。
次の日付変換は、Oracle Database SQLファンクションで実装されています。これらの変換の説明および例は、Oracle Database SQL言語リファレンスで日時ファンクションに関する説明を参照してください。
ADD_MONTHS
CURRENT_DATE
DBTIMEZONE
FROM_TZ
LAST_DAY
MONTHS_BETWEEN
NEW_TIME
NEXT_DAY
ROUND
SESSIONTIMEZONE
SYSDATE
SYSTIMESTAMP
SYS_EXTRACT_UTC
TRUNC
Warehouse Builderのカスタム日時変換は次のとおりです。
構文
WB_CAL_MONTH_NAME(attribute)
目的
このファンクション・コールでは、attribute
で指定した日付の月名が、省略されない名前で戻されます。
例
次の例では、sysdate
および指定した日付文字列に対する値を戻します。
SELECT WB_CAL_MONTH_NAME(sysdate) FROM DUAL; WB_CAL_MONTH_NAME(SYSDATE) ---------------------------- March SELECT WB_CAL_MONTH_NAME('26-MAR-2002') FROM DUAL; WB_CAL_MONTH_NAME('26-MAR-2002') ---------------------------------- March
構文
WB_CAL_MONTH_OF_YEAR(attribute)
目的
WB_CAL_MONTH_OF_YEAR
は、attribute
で指定される日付の月(1から12)を戻します。
例
次の例では、sysdate
および指定した日付文字列に対する値を戻します。
SELECT WB_CAL_MONTH_OF_YEAR(sysdate) month FROM DUAL; MONTH ---------- 3 SELECT WB_CAL_MONTH_OF_YEAR('26-MAR-2002') month FROM DUAL; MONTH ---------- 3
構文
WB_CAL_MONTH_SHORT_NAME(attribute)
目的
WB_CAL_MONTH_SHORT_NAME
は、attribute
で指定される日付の月の短縮名(「Jan」など)を戻します。
例
次の例では、sysdate
および指定した日付文字列に対する値を戻します。
SELECT WB_CAL_MONTH_SHORT_NAME (sysdate) month FROM DUAL; MONTH --------- Mar SELECT WB_CAL_MONTH_SHORT_NAME ('26-MAR-2002') month FROM DUAL; MONTH --------- Mar
構文
WB_CAL_QTR(attribute)
目的
WB_CAL_QTR
は、attribute
で指定される日付のグレゴリオ暦の四半期(1月から3月の場合は1)を戻します。
例
次の例では、sysdate
および指定した日付文字列に対する値を戻します。
SELECT WB_CAL_QTR (sysdate) quarter FROM DUAL; QUARTER ---------- 1 SELECT WB_CAL_QTR ('26-MAR-2002') quarter FROM DUAL; QUARTER ---------- 1
構文
WB_CAL_WEEK_OF_YEAR(attribute)
目的
WB_CAL_WEEK_OF_YEAR
は、attribute
で指定される日付の週(1から53)を戻します。
例
次の例では、sysdate
および指定した日付文字列に対する値を戻します。
SELECT WB_CAL_WEEK_OF_YEAR (sysdate) w_of_y FROM DUAL; W_OF_Y ---------- 13 SELECT WB_CAL_WEEK_OF_YEAR ('26-MAR-2002') w_of_y FROM DUAL; W_OF_Y ---------- 13
構文
WB_CAL_YEAR(attribute)
目的
WB_CAL_YEAR
は、attribute
で指定された日付の年の数値を戻します。
例
次の例では、sysdate
および指定した日付文字列に対する値を戻します。
SELECT WB_CAL_YEAR (sysdate) year FROM DUAL; YEAR ---------- 2002 SELECT WB_CAL_YEAR ('26-MAR-2002') w_of_y FROM DUAL; YEAR ---------- 2002
構文
WH_CAL_YEAR_NAME(attribute)
目的
WB_CAL_YEAR_NAME
は、attribute
で指定される日付の年のスペル・アウトした名前を戻します。
例
次の例では、sysdate
および指定した日付文字列に対する値を戻します。
select WB_CAL_YEAR_NAME (sysdate) name from dual; NAME ---------------------------------------------- Two Thousand Two select WB_CAL_YEAR_NAME ('26-MAR-2001') name from dual; NAME ---------------------------------------------- Two Thousand One
構文
WB_DATE_FROM_JULIAN(attribute)
目的
WB_DATE_FROM_JULIAN
は、ユリウス暦の日付attribute
を通常の日付に変換します。
例
次の例では、指定したユリウス暦の日付に対する値を戻します。
select to_char(WB_DATE_FROM_JULIAN(3217345),'dd-mon-yyyy') JDate from dual; JDATE ----------- 08-sep-4096
構文
WB_DAY_NAME(attribute)
目的
WB_DAY_NAME
は、attribute
で指定される日付の完全な曜日名を戻します。
例
次の例では、sysdate
および指定した日付文字列に対する値を戻します。
select WB_DAY_NAME (sysdate) name from dual; NAME -------------------------------------------- Thursday select WB_DAY_NAME ('26-MAR-2002') name from dual; NAME -------------------------------------------- Tuesday
構文
WB_DAY_OF_MONTH(attribute)
目的
WB_DAY_OF_MONTH
は、attribute
で指定される日付の、月内での日付番号を戻します。
例
次の例では、sysdate
および指定した日付文字列に対する値を戻します。
select WB_DAY_OF_MONTH (sysdate) num from dual; NUM ---------- 28 select WB_DAY_OF_MONTH ('26-MAR-2002') num from dual NUM ---------- 26
構文
WB_DAY_OF_WEEK(attribute)
目的
WB_DAY_OF_WEEK
は、attribute
で指定される日付の、週内での日付番号をデータベース・カレンダに基づいて戻します。
例
次の例では、sysdate
および指定した日付文字列に対する値を戻します。
select WB_DAY_OF_WEEK (sysdate) num from dual; NUM ---------- 5 select WB_DAY_OF_WEEK ('26-MAR-2002') num from dual; NUM ---------- 3
構文
WB_DAY_OF_YEAR(attribute)
目的
WB_DAY_OF_YEAR
は、attribute
で指定される日付の、年内での日付番号を戻します。
例
次の例では、sysdate
および指定した日付文字列に対する値を戻します。
select WB_DAY_OF_YEAR (sysdate) num from dual; NUM ---------- 87 select WB_DAY_OF_YEAR ('26-MAR-2002') num from dual; NUM ---------- 85
構文
WB_DAY_SHORT_NAME(attribute)
目的
WB_DAY_SHORT_NAME
は、attribute
で指定される日付の、曜日の3文字の略称または名前を戻します。
例
次の例では、sysdate
および指定した日付文字列に対する値を戻します。
select WB_DAY_SHORT_NAME (sysdate) abbr from dual; ABBR ------------------------------------- Thu select WB_DAY_SHORT_NAME ('26-MAR-2002') abbr from dual; NUM ------------------------------------- Tue
構文
WB_DECADE(attribute)
目的
WB_DECADE
は、attribute
で指定される日付の、世紀内での年を10年単位で戻します。
例
次の例では、sysdate
および指定した日付文字列に対する値を戻します。
select WB_DECADE (sysdate) dcd from dual; DCD ---------- 2 select WB_DECADE ('26-MAR-2002') DCD from dual; DCD ---------- 2
構文
WB_HOUR12(attribute)
目的
WB_HOUR12
は、attribute
に対応する日付の時間(12時間設定)を戻します。
例
次の例では、sysdate
および指定した日付文字列に対する値を戻します。
select WB_HOUR12 (sysdate) h12 from dual; H12 ---------- 9 select WB_HOUR12 ('26-MAR-2002') h12 from dual; H12 ---------- 12
注意: 2番目の例のように、タイムスタンプを含まない日付の場合、Oracleでは深夜12:00のタイムスタンプが使用されるため、この場合は12が戻されます。 |
構文
WB_HOUR12MI_SS(attribute)
目的
WB_HOUR12MI_SS
は、HH12:MI:SSという書式でattribute
のタイムスタンプを戻します。
例
次の例では、sysdate
および指定した日付文字列に対する値を戻します。
select WB_HOUR12MI_SS (sysdate) h12miss from dual; H12MISS ------------------------------------- 09:08:52 select WB_HOUR12MI_SS ('26-MAR-2002') h12miss from dual; H12MISS ------------------------------------- 12:00:00
注意: 2番目の例のように、タイムスタンプを含まない日付の場合、Oracleでは深夜12:00のタイムスタンプが使用されるため、この場合は12が戻されます。 |
構文
WB_HOUR24(attribute)
目的
WB_HOUR24
は、attribute
に対応する日付の時間(24時間設定)を戻します。
例
次の例では、sysdate
および指定した日付文字列に対する値を戻します。
select WB_HOUR24 (sysdate) h24 from dual; H24 ---------- 9 select WB_HOUR24 ('26-MAR-2002') h24 from dual; H24 ---------- 0
注意: 2番目の例のように、タイムスタンプを含まない日付の場合、Oracleでは00:00:00というタイムスタンプが使用されるため、この場合はこのタイムスタンプが戻されます。 |
構文
WB_HOUR24MI_SS(attribute)
目的
WB_HOUR24MI_SS
は、HH24:MI:SSという書式でattribute
のタイムスタンプを戻します。
例
次の例では、sysdate
および指定した日付文字列に対する値を戻します。
select WB_HOUR24MI_SS (sysdate) h24miss from dual; H24MISS ------------------------------------ 09:11:42 select WB_HOUR24MI_SS ('26-MAR-2002') h24miss from dual; H24MISS ------------------------------------ 00:00:00
注意: 2番目の例のように、タイムスタンプを含まない日付の場合、Oracleでは00:00:00というタイムスタンプが使用されるため、この場合はこのタイムスタンプが戻されます。 |
構文
WB_IS_DATE(attribute, fmt)
目的
attribute
に有効な日付が含まれているかどうかをチェックします。このファンクションで戻されるブール値は、attribute
に有効な日付が含まれている場合、trueに設定されます。fmt
は、オプションの日付書式です。fmt
を省略した場合は、データベース・セッションの日付書式が使用されます。
このファンクションは、データを検証してから表にロードする場合に使用できます。この方法により、値が表にロードされエラーの原因になる前に、値を変換できます。
例
WB_IS_DATE
は、attribute
に有効な日付が含まれる場合、PL/SQLのTRUEを戻します。
構文
WB_JULIAN_FROM_DATE(attribute)
目的
WB_JULIAN_FROM_DATE
は、attribute
に対応する日付のユリウス暦の日付を戻します。
例
次の例では、sysdate
および指定した日付文字列に対する値を戻します。
select WB_JULIAN_FROM_DATE (sysdate) jdate from dual; JDATE ---------- 2452362 select WB_JULIAN_FROM_DATE ('26-MAR-2002') jdate from dual; JDATE ---------- 2452360
構文
WB_MI_SS(attribute)
目的
WB_MI_SS
は、attribute
に対応する日付の時間の分と秒を戻します。
例
次の例では、sysdate
および指定した日付文字列に対する値を戻します。
select WB_MI_SS (sysdate) mi_ss from dual; MI_SS ------------------------------------------- 33:23 select WB_MI_SS ('26-MAR-2002') mi_ss from dual; MI_SS ------------------------------------------- 00:00
注意: 2番目の例のように、タイムスタンプを含まない日付の場合、Oracleでは00:00:00というタイムスタンプが使用されるため、この場合はこのタイムスタンプが戻されます。 |
Warehouse Builderユーザーは、番号変換により、数値で変換を実行できます。これらの変換には、Warehouse Builderによって実装されるSQLファンクションおよびWarehouse Builderで定義されるカスタム・ファンクションが含まれます。カスタム・ファンクションには、WB_
が接頭辞として付きます。
表19-2に、Oracle Database SQL数値ファンクションを利用した数値変換を示します。この変換は縦欄式の表で、領域を節約するため左から右に列が整列して表示されています。
表19-2 Database SQLファンクションを使用した数値変換のリスト
番号変換名 | 番号変換名(続き) | 番号変換名(続き) |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
これらの変換の説明および例は、Oracle Database SQL言語リファレンスの数値ファンクションに関する項を参照してください。
カスタム数値変換は、次のとおりです。
構文
WB_LOOKUP_NUM (table_name , column_name , key_column_name , key_value )
table_name
は、参照する表の名前です。column_name
は、参照結果などで戻されるNUMBER
列の名前です。key_column_name
は、参照表で照合するキーとして使用するNUMBER
列の名前です。key_value
は、照合を実行するkey_column_name
にマップされる値などのキー列の値です。
目的
NUMBER
列を照合キーとして使用して、キー参照を実行し、データベース表からNUMBER
値を戻します。
例
次の表を参照表LKP1
として使用します。
KEYCOLUMN TYPE_NO TYPE 10 100123 Car 20 100124 Bike
次のようなコールで、このパッケージを使用します。
WB_LOOKUP_CHAR('LKP1' , 'TYPE_NO' , 'KEYCOLUMN' , 20 )
この変換の出力として値100124が戻されます。この出力は、インライン・ファンクション・コールの結果としてマッピングで処理されます。
注意: このファンクションは、行ベースのキー参照です。セット・ベースの参照は、参照演算子を使用した場合にサポートされます。 |
構文:
WB_LOOKUP_CHAR(table_name , column_name , key_column_name , key_value )
table_name
は、参照する表の名前です。column_name
は、参照結果などで戻されるVARCHAR2
列の名前です。key_column_name
は、参照表で照合するキーとして使用するVARCHAR2
列の名前です。key_value
は、照合を実行するkey_column_name
にマップされる値などのキー列の値です。
目的
VARCHAR2
列を照合キーとして使用し、キー参照を実行して、データベース表からNUMBER
値を戻します。
例
次の表を参照表LKP1
として使用します。
KEYCOLUMN TYPE_NO TYPE ACV 100123 Car ACP 100124 Bike
次のようなコールで、このパッケージを使用します。
WB_LOOKUP_CHAR ('LKP1' , 'TYPE' , 'KEYCOLUMN' , 'ACP' )
この変換の出力として値100124
が戻されます。この出力は、インライン・ファンクション・コールの結果としてマッピングで処理されます。
構文
WB_IS_NUMBER(attibute, fmt)
目的
attribute
に有効な数値が含まれているかどうかをチェックします。このファンクションで戻されるブール値は、attribute
に有効な数値が含まれている場合、TRUEに設定されます。fmt
は、オプションの数値書式です。fmt
を省略すると、セッションの数値書式が使用されます。
このファンクションは、データを表にロードする前に検証する際に使用できます。これにより、値が表にロードされてエラーの原因になる前に値を変換できます。
例
attribute
に有効な数値が含まれている場合、WB_IS_NUMBER
はPL/SQLのTRUE
を戻します。
Warehouse Builderユーザーは、OLAP変換により、リレーショナル・ディメンションおよびリレーショナル・キューブに格納されたデータを、アナリティック・ワークスペースにロードできます。
Warehouse Builderで提供されるOLAP変換は、次のとおりです。
WB_OLAP_LOAD_CUBE
、WB_OLAP_LOAD_DIMENSION
およびWB_OLAP_LOAD_DIMENSION_GENUK
の各変換は、Warehouse Builderでキューブのクローニングに使用します。これらのOLAP変換は、データベースのバージョンがOracle Database 9iまたはOracle Database 10gリリース1の場合にのみ使用します。Oracle 10gリリース2からは、ディメンションおよびキューブをアナリティック・ワークスペースに直接配布できます。
WB_OLAP_AW_PRECOMPUTE
は、Oracle Warehouse Builder 10gリリース2でのみ動作します。
これらのOLAP変換の説明に使用した例は、図19-3に示すシナリオに基づいています。
リレーショナル・ディメンションTIME_DIM
とリレーショナル・キューブSALES_CUBE
は、スキーマWH_TGT
に格納されています。スキーマWH_TGT
には、ディメンションとキューブがロードされたアナリティック・ワークスペースAW_WH
も作成されています。
構文
WB_OLAP_AW_PRECOMPUTE(p_aw_name, p_cube_name, p_measure_name, p_allow_parallel_ solve, p_max_job_queues_allocated)
p_aw_name
は、キューブが配布されるアナリティック・ワークスペースの名前です。p_cube_name
は、解決するキューブの名前です。p_measure_name
は、解決する特定のメジャーの任意の名前です(メジャーが指定されない場合、すべてのメジャーが解決されます)。p_allow_parallel_solve
は、パーティション化を基に解決のパラレル化を行うかどうかを示すブール値です(パフォーマンス関連のパラメータ)。p_max_job_queues_allocated
は、パラレル実行するDBMSジョブの個数です(デフォルト値は0)。これを5と定義し、20のパーティションがある場合、5つのDBMSジョブのプールが、データ・ロードの実行に使用されます。パラレルと非パラレルの解決は、微妙に異なります。非パラレル解決では、解決が同期的に実行されるため、APIコールが完了すると解決も完了します。パラレル解決は非同期的に実行され、APIコールは、起動されたジョブのジョブID付きで戻されます。ジョブは、その処理を制御する最大ジョブ・キュー・パラメータを使用して、パラレル解決を制御します。ユーザーは、そのジョブIDをall_scheduler_*ビューの問合せに使用して、アクティビティのステータスをチェックできます。
目的
WB_OLAP_AW_PRECOMPUTEは、圧縮されていないキューブの解決に使用します(圧縮されたキューブは自動解決されます)。ロードおよび解決のステップは、別々に実行できます。デフォルトでは、キューブ・マップでデータをロードしてから、キューブを解決(事前計算)します。このマップを使用してデータをロードしてから、別の時点で解決を実行できます(解決と構築を同時に行うのは、最も時間がかかる操作であるため)。
例
次の例では、リレーショナル・キューブMART
およびSALES_CUBE
からキューブSALES
にデータをロードし、連続で動作する単純な解決を実行します。この例では、パラレル解決のパラメータおよびジョブ・キューの最大数のパラメータがあります。パラレル解決が実行されると、ASYNCHRONOUS解決ジョブが起動し、リターン・ファンクションを通じてマスター・ジョブIDが戻されます。
declare rslt varchar2(4000); begin … rslt :=wb_olap_aw_precompute('MART','SALES_CUBE','SALES'); … end; /
構文
wb_olap_load_cube::=WB_OLAP_LOAD_CUBE(olap_aw_owner, olap_aw_name, olap_cube_owner, olap_cube_name, olap_tgt_cube_name)
olap_aw_owner
は、アナリティック・ワークスペースを保有するデータベース・スキーマの名前です。olap_aw_name
は、キューブ・データを格納するアナリティック・ワークスペースの名前です。olap_cube_owner
は、関連するリレーショナル・キューブを保有するデータベース・スキーマの名前です。olap_cube_name
は、リレーショナル・キューブの名前です。olap_tgt_cube_name
は、アナリティック・ワークスペースに入っているキューブの名前です。
目的
WB_OLAP_LOAD_CUBE
は、リレーショナル・キューブからアナリティック・ワークスペースにデータをロードします。これにより、キューブ・データを詳細に分析できます。これは、クローニング元のリレーショナル・キューブからアナリティック・ワークスペース・キューブにデータをロードするためのものです。これは、キューブをロードするためのDBMS_AWMパッケージにあるいくつかのプロシージャのラッパーです。
例
次の例では、リレーショナル・キューブSALES_CUBE
からアナリティック・ワークスペースAW_WH
のキューブAW_SALES
にデータをロードします。
WB_OLAP_LOAD_CUBE('WH_TGT', 'AW_WH', 'WH_TGT', 'SALES_CUBE', 'AW_SALES')
構文
wb_olap_load_dimension::=WB_OLAP_LOAD_DIMENSION(olap_aw_owner, olap_aw_name, olap_dimension_owner, olap_dimension_name, olap_tgt_dimension_name)
olap_aw_owner
は、アナリティック・ワークスペースを保有するデータベース・スキーマの名前です。olap_aw_name
は、ディメンション・データを格納するアナリティック・ワークスペースの名前です。olap_dimension_owner
は、関連するリレーショナル・ディメンションを保有するデータベース・スキーマの名前です。olap_dimension_name
は、リレーショナル・ディメンションの名前です。olap_tgt_dimension_name
は、アナリティック・ワークスペースに入っているディメンションの名前です。
目的
WB_OLAP_LOAD_DIMENSION
は、リレーショナル・ディメンションからアナリティック・ワークスペースにデータをロードします。これにより、ディメンション・データを詳細に分析できます。これは、クローニング元のリレーショナル・ディメンションからアナリティック・ワークスペース・ディメンションにデータをロードするためのものです。これは、ディメンションをロードするためのDBMS_AWMパッケージにあるいくつかのプロシージャのラッパーです。
例
次の例では、リレーショナル・ディメンションTIME_DIM
からアナリティック・ワークスペースAW_WH
のディメンションAW_TIME
にデータをロードします。
WB_OLAP_LOAD_DIMENSION('WH_TGT', 'AW_WH', 'WH_TGT', 'TIME_DIM', 'AW_TIME')
構文
wb_olap_load_dimension_genuk::=WB_OLAP_LOAD_DIMENSION_GENUK(olap_aw_owner, olap_aw_name, olap_dimension_owner, olap_dimension_name, olap_tgt_dimension_name)
olap_aw_owner
は、アナリティック・ワークスペースを保有するデータベース・スキーマの名前です。olap_aw_name
は、ディメンション・データを格納するアナリティック・ワークスペースの名前です。olap_dimension_owner
は、関連するリレーショナル・ディメンションを保有するデータベース・スキーマの名前です。olap_dimension_name
は、リレーショナル・ディメンションの名前です。olap_tgt_dimension_name
は、アナリティック・ワークスペースに入っているディメンションの名前です。
目的
WB_OLAP_LOAD_DIMENSION_GENUK
は、リレーショナル・ディメンションからアナリティック・ワークスペースにデータをロードします。これにより、すべてのレベルで一意のディメンション識別子が生成されます。これは、クローニング元のリレーショナル・ディメンションからアナリティック・ワークスペース・ディメンションにデータをロードするためのものです。これは、ディメンションをロードするためのDBMS_AWMパッケージにあるいくつかのプロシージャのラッパーです。
キューブがクローニングされた場合、「ディメンションのサロゲート・キーを生成」オプションで「はい」を選択すると、ディメンションを再ロードするときに、WB_OLAP_LOAD_DIMENSION_GENUK
プロシージャを使用する必要があります。このプロシージャでは、アナリティック・ワークスペースのすべてのレベルでサロゲート識別子が生成されます。これは、アナリティック・ワークスペースでは、すべてのレベルの識別子が、すべてのレベルのディメンションで一意である必要があるためです。
例
キューブのクローニングによって、ディメンションTIME_DIM
がOLAP Serverに配布されている場合を考えます。パラメータ「ディメンションのサロゲート・キーを生成」がTRUEに設定されているとします。ここで、リレーショナル・ディメンションTIME_DIM
からアナリティック・ワークスペースAW_WH
のディメンションAW_TIME
にデータを再ロードするには、次の構文を使用します。
WB_OLAP_LOAD_CUBE('WH_TGT', 'AW_WH', 'WH_TGT', 'TIME_DIM', 'AW_TIME')
Warehouse Builderの他の変換を使用すると、特定のデータ型に限定されない機能を実行できます。これらの変換はOracle Database SQLファンクションで実装されています。これらの変換の説明および例は、Oracle Database SQL言語リファレンスを参照してください。
DEPTH
DUMP
EMPTY_BLOB
EMPTY_CLOB
NLS_CHARSET_DECL_LEN
NLS_CHARSET_ID
NLS_CHARSET_NAME
NULLIF
NVL
NVL2
ORA_HASH
PATH
SYS_CONTEXT
SYS_GUID
SYS_TYPEID
UID
USER
USERENV
VSIZE
空間変換は、ファンクションとプロシージャを統合したもので、これによって、Oracle Databaseで空間データを迅速かつ効率的に格納、アクセスおよび分析できます。
Warehouse Builderで使用できる空間変換は、次のとおりです。
SDO_AGGR_CENTROID
SDO_AGGR_CONVEXHULL
SDO_AGGR_MBR
SDO_AGGR_UNION
これらの変換の説明および例は、Oracle Spatial開発者ガイドを参照してください。
ストリーム変換のカテゴリには、REPLICATEという変換が1つあります。次の項では、この変換について説明します。
構文
REPLICATE(lcr, conflict_resolution)
lcr
は、Logical Change Record(論理変更レコード)の略で、DML変更をカプセル化します。そのデータ型はSYS.LCR$_ROW_RECORDです。conflict_resolution
は、ブール変数です。この値がTRUEの場合、表に定義された競合解消方法のいずれかを使用して、LCRの実行に起因する競合を解消します。競合解消の詳細は、Oracle Streamsレプリケーション管理者ガイドを参照してください。
目的
REPLICATEを使用して、ソース・システムの表で発生したDML変更(INSERT、UPDATEまたはDELETE)を、ターゲット・システムの同じ表にレプリケートします。ターゲット・システムの表は、次の点でソース・システムの表と同一である必要があります。
ターゲット表を含むスキーマの名前は、ソース表を含むスキーマの名前と同じである必要があります。
ターゲット表の名前は、ソース表の名前と同じである必要があります。
ターゲット表の構造は、ソース表の構造と同じである必要があります。構造には、数、名前、表の列のデータ型が含まれます。
例
ソース・システムのスキーマSには表T1(c1 varchar2(10), c2 number primary key)があり、ターゲット・システムにも同一の表があるとします。ソース・システムの表T1で、次の挿入操作をするとします。
insert into T1 values ('abcde', 10)
ソース・システムの表T1で前述の行挿入を行った後の変更を表すLCRの詳細は、次のとおりです。
LCR.GET_OBJECT_OWNER will be 'S' LCR.GET_OBJECT_NAME will be 'T1' LCR.GET_COMMAND_TYPE will be 'INSERT' LCR.GET_VALUE('c1', 'new') will have the value for the column 'c1' - i.e. 'abcde' LCR.GET_VALUE('c2', 'new') will have the value for the column 'c2' - i.e. 10
このようなLCRは、ソース・システムでの表S.T1の変更を取り込むストリーム・キャプチャ・プロセスによって作成され、エンキューされます。
REPLICATE(lcr, true)
- ターゲット・システムの表T1
に、行('abcde', 10)が挿入されます。
注意: このアプローチを使用すると、系統情報を取得できません。系統が重要な場合、このファンクションは使用しないでください。ソース表にバインドされたLCRCast演算子とターゲット表にバインドされた表演算子を使用して、これらの2つの演算子の属性を同じ名前(名前による一致)で接続する、より直接的なアプローチを使用します。LCR(論理変更レコード)の詳細は、Oracle Database 10gのドキュメント(情報統合)を参照してください。 |
Warehouse Builderユーザーは、XML変換により、XMLオブジェクトで変換を実行できます。Warehouse Builderユーザーは、この変換により、XML文書とOracle AQをロードおよび変換できます。
XMLソースのロードを可能にするため、Warehouse Builderでは、データベースのXML機能を実装してデータベースのXML機能にアクセスします。また、Warehouse Builderでは、カスタム・ファンクションが定義されます。
Oracle DatabaseのXML機能に基づいて実装されるXML変換は次のとおりです。
EXISTSNODE
EXTRACT
EXTRACTVALUE
SYS_XMLAGG
SYS_XMLGEN
XMLCONCAT
XMLSEQUENCE
XMLTRANSFORM
関連項目:
|
カスタムXML変換は、次のとおりです。
構文:
WB_XML_LOAD(control_file)
目的
このプログラム・ユニットは、XML文書からデータを抽出し、そのデータをデータベース・ターゲットにロードします。control_file
(XML文書)には、XML文書のソース、ターゲットおよびランタイム制御を指定します。変換を定義した後、Warehouse Builderでのマッピングでは、マッピング前トリガーまたはマッピング後トリガーとしてこの変換がコールされます。
例
次の例では、ファイルproducts.xmlに保存されているXML文書からデータを抽出し、そのデータをターゲット表booksにロードするWarehouse Builder変換の実装時に使用されるスクリプトを示します。
begin
wb_xml_load('<OWBXMLRuntime>' || '<XMLSource>' || ' <file>\ora817\GCCAPPS\products.xml</file>' || '</XMLSource>' || '<targets>' || ' <target XSLFile="\ora817\XMLstyle\GCC.xsl">books</target>' || '</targets>' || '</OWBXMLRuntime>' );
end;
制御ファイルの詳細は、Oracle Warehouse Builderユーザーズ・ガイドを参照してください。
構文
WB_XML_LOAD_F(control_file)
目的
WB_XML_LOAD_F
は、XML文書からデータを抽出し、そのデータをデータベース・ターゲットにロードします。このファンクションは、ロード中に読み込まれたXML文書の数を戻します。control_file
(XML文書)には、XML文書のソース、ターゲットおよびランタイム制御を指定します。変換を定義した後、Warehouse Builderでのマッピングでは、マッピング前トリガーまたはマッピング後トリガーとしてこの変換がコールされます。
例
次の例では、ファイルproducts.xml
に保存されているXML文書からデータを抽出し、そのデータをターゲット表booksにロードするWarehouse Builder変換の実装時に使用されるスクリプトを示します。
begin
wb_xml_load_f('<OWBXMLRuntime>' || '<XMLSource>' || ' <file>\ora817\GCCAPPS\products.xml</file>' || '</XMLSource>' || '<targets>' || ' <target XSLFile="\ora817\XMLstyle\GCC.xsl">books</target>' || '</targets>' || '</OWBXMLRuntime>' );
end;
処理されるタイプおよびcontrol_file
の詳細は、Oracle Warehouse Builderユーザーズ・ガイドを参照してください。
「インポート・メタデータ・ウィザード」を使用して、Pl/SQLファンクション、プロシージャ、およびパッケージをWarehouse Builderプロジェクトへインポートします。インポートしたPL/SQLファンクションおよびプロシージャの編集、保存、および配布ができます。また、インポートしたパッケージの表示および変更ができます。
次の手順では、PL/SQLパッケージを他のソースからWarehouse Builderにインポートする方法を説明します。
PL/SQLファンクション、プロジェクトまたはパッケージをインポートする手順は、次のとおりです。
プロジェクト・エクスプローラからプロジェクト・ノードを開き、次に「データベース」ノードを開きます。
Oracleモジュールのノードを右クリックして「インポート」を選択します。
Warehouse Builderにより、「インポート・メタデータ・ウィザード」のようこそページが表示されます。
「次へ」をクリックします。
フィルタ情報ページの「オブジェクト・タイプ」フィールドで、「PL/SQL変換」を選択します。
「次へ」をクリックします。
インポート・メタデータ・ウィザードのオブジェクト選択ページが表示されます。
「使用可能なオブジェクト」リストから、ファンクション、プロシージャまたはパッケージを選択します。オブジェクトを「選択したオブジェクト」リストに移動する際、単一オブジェクトの移動には右矢印ボタンを、複数オブジェクトの移動には「すべて移動」ボタンをクリックします。
「次へ」をクリックします。
インポート・メタデータ・ウィザードのサマリーとインポート・ページが表示されます。
インポート情報を確認します。選択した内容を変更するには、「戻る」をクリックします。
「終了」をクリックして、選択したPL/SQL変換をインポートします。
Warehouse Builderで、インポート結果ページが表示されます。
「OK」をクリックしてインポートを続行します。インポート・プロセスを取り消すには、「元に戻す」をクリックします。
インポートしたPL/SQL情報が、データをインポートしたOracleモジュールの「変換」ノードに表示されます。
シナリオ
ある映画レンタル会社では、CUST_RENTAL_ACTIVITY
表に定期的に顧客のレンタル状況を更新しており、この表には各顧客のレンタル売上および延滞料金データが格納されています。この表は様々なメーリング・キャンペーンに使用されます。たとえば、最新のメーリング・キャンペーンでは、高額な延滞料金のある顧客に対し、新しいペイパービュー・サービスを提供します。現在、この映画レンタル会社では、PL/SQLパッケージを使用して顧客のデータを一元化しています。既存のPL/SQLパッケージは、データベースにアクセスすることにより手動で保持する必要があります。このコードはOracle 8iデータベースで実行されます。
CREATE OR REPLACE PACKAGE RENTAL_ACTIVITY AS PROCEDURE REFRESH_ACTIVITY(SNAPSHOT_START_DATE IN DATE); END RENTAL_ACTIVITY; / CREATE OR REPLACE PACKAGE BODY RENTAL_ACTIVITY AS PROCEDURE REFRESH_ACTIVITY(SNAPSHOT_START_DATE IN DATE) IS CURSOR C_ACTIVITY IS SELECT CUST.CUSTOMER_NUMBER CUSTOMER_NUMBER, CUST.CUSTOMER_FIRST_NAME CUSTOMER_FIRST_NAME, CUST.CUSTOMER_LAST_NAME CUSTOMER_LAST_NAME, CUST.CUSTOMER_ADDRESS CUSTOMER_ADDRESS, CUST.CUSTOMER_CITY CUSTOMER_CITY, CUST.CUSTOMER_STATE CUSTOMER_STATE, CUST.CUSTOMER_ZIP_CODE CUSTOMER_ZIP_CODE, SUM(SALE.RENTAL_SALES) RENTAL_SALES, SUM(SALE.OVERDUE_FEES) OVERDUE_FEES FROM CUSTOMER CUST, MOVIE_RENTAL_RECORD SALE WHERE SALE.CUSTOMER_NUMBER = CUST.CUSTOMER_NUMBER AND SALE.RENTAL_RECORD_DATE >= SNAPSHOT_START_DATE GROUP BY CUST.CUSTOMER_NUMBER, CUST.CUSTOMER_FIRST_NAME, CUST.CUSTOMER_LAST_NAME, CUST.CUSTOMER_ADDRESS, CUST.CUSTOMER_CITY, CUST.CUSTOMER_STATE, CUST.CUSTOMER_ZIP_CODE; V_CUSTOMER_NUMBER NUMBER; V_CUSTOMER_FIRST_NAME VARCHAR2(20); V_CUSTOMER_LAST_NAME VARCHAR2(20); V_CUSTOMER_ADDRESS VARCHAR(50); V_CUSTOMER_CITY VARCHAR2(20); V_CUSTOMER_STATE VARCHAR2(20); V_CUSTOMER_ZIP_CODE VARCHAR(10); V_RENTAL_SALES NUMBER; V_OVERDUE_FEES NUMBER; BEGIN OPEN C_ACTIVITY; LOOP EXIT WHEN C_ACTIVITY%NOTFOUND; FETCH C_ACTIVITY INTO V_CUSTOMER_NUMBER, V_CUSTOMER_FIRST_NAME, V_CUSTOMER_LAST_NAME, V_CUSTOMER_ADDRESS, V_CUSTOMER_CITY, V_CUSTOMER_STATE, V_CUSTOMER_ZIP_CODE, V_RENTAL_SALES, V_OVERDUE_FEES; UPDATE CUST_ACTIVITY_SNAPSHOT SET CUSTOMER_FIRST_NAME = V_CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME = V_CUSTOMER_LAST_NAME, CUSTOMER_ADDRESS = V_CUSTOMER_ADDRESS, CUSTOMER_CITY = V_CUSTOMER_CITY, CUSTOMER_STATE = V_CUSTOMER_STATE, CUSTOMER_ZIP_CODE = V_CUSTOMER_ZIP_CODE, RENTAL_SALES = V_RENTAL_SALES, OVERDUE_FEES = V_OVERDUE_FEES, STATUS_UPDATE_DATE = SYSDATE WHERE CUSTOMER_NUMBER = V_CUSTOMER_NUMBER; IF SQL%NOTFOUND THEN INSERT INTO CUST_ACTIVITY_SNAPSHOT ( CUSTOMER_NUMBER, CUSTOMER_FIRST_NAME, CUSTOMER_LAST_NAME, CUSTOMER_ADDRESS, CUSTOMER_CITY, CUSTOMER_STATE, CUSTOMER_ZIP_CODE, RENTAL_SALES, OVERDUE_FEES, STATUS_UPDATE_DATE ) VALUES ( V_CUSTOMER_NUMBER, V_CUSTOMER_FIRST_NAME, V_CUSTOMER_LAST_NAME, V_CUSTOMER_ADDRESS, V_CUSTOMER_CITY, V_CUSTOMER_STATE, V_CUSTOMER_ZIP_CODE, V_RENTAL_SALES, V_OVERDUE_FEES, SYSDATE ); END IF; END LOOP; END REFRESH_ACTIVITY; END RENTAL_ACTIVITY; /
解決策
この事例では、既存のカスタムPL/SQLパッケージをWarehouse Builderにインポートする利点とPL/SQLコードの自動的な保持、更新および再生成を行う機能を使用する利点について説明します。Warehouse Builderによりデータベースの新機能を自動的に利用できるようになり、またデータベースの新規バージョン向けに最適化されたコードを生成することによりWarehouse Builderは更新されます。たとえば、顧客がOracle 8i用のPL/SQLパッケージを持つ場合は、パッケージをWarehouse BuilderにインポートすることによりOracle 8iおよびOracle 9iの両方に対してコードを生成できます。また、カスタム・パッケージをインポートしてWarehouse Builderマッピングを介した操作を再作成することにより、操作を透過的に実行および監視できます。そうでない場合は、データベースに手動でアクセスしてコードの検証および更新を行います。またWarehouse Builderでは、ランタイム監査ブラウザでコードの実行が監視されエラーが記録されている間に、すべてのETL操作に対して系統および影響分析を実行することも可能です。
事例
次の手順に従って、Warehouse BuilderにPL/SQLコードを移行できます。
手順2: ブラック・ボックス・マッピングの作成 Warehouse Builderマッピング内のカスタム変換を使用します。
手順3: カスタム・コードのマッピングへの移行 レガシーPL/SQLコード機能を新規のWarehouse Builderマッピングに移行し、カスタム・パッケージを段階的に廃止します。
次の手順に従って、Warehouse Builder内のカスタムPL/SQLパッケージを処理します。
手順1: カスタムPL/SQLパッケージのインポート
プロジェクト・エクスプローラで、PL/SQLパッケージrefresh_activity(
DATE
)
をインポートする先のOracleモジュール内の「変換」ノードを開きます。インポート・メタデータ・ウィザードを使用して、「変換」を右クリックし「インポート」を選択することにより、パッケージをインポートします。このウィザードのフィルタ情報ページで、PL/SQL変換をインポートしていることが示されます。
インポートの終了後、パッケージrefresh_activity(
DATE
)
が「変換」フォルダの「パッケージ」ノードの下に表示されます。
手順2: ブラック・ボックス・マッピングの作成
変更を加えることなく、refresh_activity(
DATE
)
プロシージャをマッピングで直接使用できます。マッピングでは、マッピング後プロセス演算子を、選択したパッケージrefresh_activity(
DATE
)
を使用するマッピングに追加します。
この例では、既存のカスタム・コードをすぐに利用できます。リソースに対する学習期間および投資は最小限に抑えられます。新規の処理単位を開発するためにのみWarehouse Builderを使用して、この方法で既存および開発済のすべてのPL/SQLコードを保持するよう決定できます。Warehouse Builderにより、新規に作成するマッピングとレガシー・コードを使用するマッピングを使用できます。この場合、Warehouse Builderではこれらのマッピング用のコードを生成できますが、コードのメンテナンス、更新および監査のためにWarehouse Builder機能は使用できません。
レガシー・コードは、Warehouse Builderに対して透過的でないブラック・ボックスとして使用されるため、レガシー・コードを手動でメンテナンスする必要があります。したがって、ランタイム監査ブラウザ、系統および影響分析および最適化されたコード生成など、Warehouse Builderにより生成されたマッピングで使用可能なインフラストラクチャ・コードおよびメタデータに依存するWarehouse Builder機能を利用できません。
Warehouse Builder内のこれらの機能を利用し、PL/SQLコードを自動的に保持、監視および生成するには、次の手順に従います。
手順3: カスタム・コードのマッピングへの移行
コードの生成、保持および監査機能を利用するためには、レガシーPL/SQLコード機能をマッピングへ徐々に移行し、カスタム・ブラック・ボックス・パッケージを段階的に廃止できます。PL/SQLコード機能を利用するために作成されたマッピングはRental_Activity
と呼ばれます。
ブラック・ボックス・マッピングと並行して新規マッピングを実行することでこの新規マッピングをテストする方法をお薦めします。テストが正常に終了し、新規マッピングを使用してカスタム・コードを含むすべての操作を実行できる場合は、ブラック・ボックス・マッピングを段階的に廃止できます。Warehouse Builderでは、データベース内で手動更新を実行することなく、マッピングからのコードを保持、更新および生成できます。図19-4は、Rental_Activity
マッピングから生成されたコードのサンプルを示しており、このマッピングにより映画レンタル会社用のカスタムPL/SQLパッケージの操作が複製されます。
手順4: Oracle 9i用のコードの生成
Oracle 9iバージョンのデータベースにアップグレードする場合は、手順3で作成したRental_Activity
マッピングのみを再配布する必要があります。Warehouse Builderにより、新規のデータベース・バージョンに対して最適化されたコードが生成されます。図19-5は、Oracle 9iの同じマッピングに対して生成されたコードのサンプルからのMERGE
文を示しています。
新規コードの保持および生成には、手動の手順は必要ありません。また、手動の手順のETL操作を透過的に監視および保持できます。Warehouse Builderでは、手動の手順を使用してマッピングに対する系統および影響分析を実行でき、ランタイム監査ブラウザでは、手動の手順を使用してマッピングの実行中にエラーを追跡および記録できます。