![]() 前へ |
![]() 次へ |
シナリオ
ある映画レンタル会社では、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では、データベース内で手動更新を実行することなく、マッピングからのコードを保持、更新および生成できます。
手順4: Oracle Database 11g用のコードの生成
Oracle 9iバージョンのデータベースにアップグレードする場合は、手順3で作成したRental_Activityマッピングのみを再配布する必要があります。Warehouse Builderにより、新規のデータベース・バージョンに対して最適化されたコードが生成されます。
新規コードの保持および生成には、手動の手順は必要ありません。また、手動の手順のETL操作を透過的に監視および保持できます。Warehouse Builderでは、手動の手順を使用してマッピングに対する系統および影響分析を実行でき、ランタイム監査ブラウザでは、手動の手順を使用してマッピングの実行中にエラーを追跡および記録できます。