![]() 前へ |
![]() 次へ |
マスター・レコードに一意のフィールドがある(または複数のフィールドを連結した結果、一意の識別子がある)マスター・ディテール・フラット・ファイルを使用している場合は、オプションのダイレクト・パス・ロードを使用すると、ロードを高速化できます。
ダイレクト・パス・ロードの場合、各レコードのレコード番号(RECNUM)はマスター表とディテール表に格納されます。ロード後の手順では、このRECNUMを使用して、各ディテール行を、対応するマスター行の一意の識別子で更新します。
この手順では、このようなマッピングを作成するための一般的な方法を概説します。次に示す詳細な手順も参照してください。
フラット・ファイル・ソースのインポート方法の詳細は、「インポート・メタデータ・ウィザードの使用」を参照してください。
ソースとしてフラット・ファイルを使用する方法の詳細は、「フラット・ファイル演算子」を参照してください。
表演算子の使用方法の詳細は、「「演算子の追加」ダイアログ・ボックスを使用した演算子の追加」を参照してください。
データ・ジェネレータ演算子の使用方法の詳細は、「データ・ジェネレータ演算子」を参照してください。
定数演算子の使用方法の詳細は、「定数演算子」を参照してください。
マッピングの構成方法の詳細は、「マッピング構成のリファレンス」を参照してください。
ダイレクト・パス・ロードを使用してマスター・ディテール・フラット・ファイルから抽出し、マスター・ディテール関係を維持する手順は、次のとおりです。
マスター・レコードとディテール・レコードで構成されたフラット・ファイル・ソースをインポートして、サンプリングします。
ファイルのサンプリング時にレコード・タイプに名前を指定する場合は、マスター・レコードとディテール・レコードに説明的な名前を割り当てます。これによって、今後はこれらのレコードを容易に識別できます。
フラット・ファイル・ソースからデータをロードするために使用するマッピングを作成します。
フラット・ファイル演算子をマッピング・キャンバスにドラッグ・アンド・ドロップし、データの抽出元のマスター・ディテール・ファイルを指定します。
データ・ジェネレータ演算子および定数演算子をマッピング・キャンバスにドラッグ・アンド・ドロップします。
マスター・レコードに対する表演算子をマッピング・キャンバスにドラッグ・アンド・ドロップします。
以前作成した既存のワークスペース表を選択するか、属性を指定せずにバインドなしで新しい表演算子を作成し、アウトバウンド同期化を実行して後で表を定義できるようにします。
この表には、ロードするマスター・フィールドに必要なすべての列と、RECNUM値をロードするための追加の数値列が含まれている必要があります。
ディテール・レコードに対する表演算子をマッピング・キャンバスにドラッグ・アンド・ドロップします。
以前作成した既存のワークスペース表を選択するか、属性を指定せずにバインドなしで新しい表演算子を作成し、アウトバウンド同期化を実行して後で表を定義できるようにします。
表には、ロードするディテール・フィールドに必要なすべての列と、RECNUM値をロードするための追加の数値列、および対応するマスター表の行の一意の識別子で更新する列が含まれている必要があります。
必要なすべてのフラット・ファイル・マスター・フィールドをマスター表に、ディテール・フィールドをディテール表にマッピングします。
定数演算子の定数属性を追加します。
マスター行の一意の識別子列がCHARデータ型である場合は、式'*'を使用して定数属性をCHAR型にします。
マスター行の一意の識別子列が数値である場合は、式'0'を使用して定数属性をNUMBERにします。
定数演算子の定数属性をディテール表の列にマッピングします。この列には、対応するマスター表レコードの一意の識別子が後で格納されます。
ダイレクト・モード: True
エラー許可: 0
後続NULL列: True(すべての表)
マッピングを検証し、SQL*Loaderスクリプトを生成した後は、更新後のPL/SQLプロシージャを作成し、それをWarehouse Builderライブラリに追加します。
SQL*Loaderスクリプトを実行します。
更新後のPL/SQLプロシージャを実行するか、スクリプトを手動で実行して、UPDATE SQL文を実行します。
次に、生成されたSQL*Loader制御ファイルのスクリプトの例を示します。
OPTIONS ( DIRECT=TRUE,PARALLEL=FALSE, ERRORS=0, BINDSIZE=50000, ROWS=200, READSIZE=65536)
LOAD DATA
CHARACTERSET WE8MSWIN1252
INFILE 'g:\FFAS\DMR2.dat'
READBUFFERS 4
INTO TABLE "MATER_TABLE"
APPEND
REENABLE DISABLED_CONSTRAINTS
WHEN
"REC_TYPE"='P'
FIELDS
TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
"REC_TYPE" POSITION (1) CHAR ,
"EMP_ID" CHAR ,
"ENAME" CHAR ,
"REC_NUM" RECNUM
)
INTO TABLE "DETAIL_TABLE"
APPEND
REENABLE DISABLED_CONSTRAINTS
WHEN
"REC_TYPE"='E'
FIELDS
TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
"REC_TYPE" POSITION (1) CHAR ,
"C1" CHAR ,
"C2" CHAR ,
"C3" CHAR ,
"EMP_ID" CONSTANT '*',
"REC_NUM" RECNUM
次に、更新後のPL/SQLプロシージャの例を示します。
create or replace procedure wb_md_post_update(
master_table varchar2
,master_recnum_column varchar2
,master_unique_column varchar2
,detail_table varchar2
,detail_recnum_column varchar2
,detail_masterunique_column varchar2
,detail_just_load_condition varchar2)
IS
v_SqlStmt VARCHAR2(1000);
BEGIN
v_SqlStmt := 'UPDATE '||detail_table||' l '||
' SET l.'||detail_masterunique_column||' = (select i.'||master_unique_column||
' from '||master_table||' i '||
' WHERE i.'||master_recnum_column||' IN '||
' (select max(ii.'||master_recnum_column||') '||
' from '||master_table||' ii '||
' WHERE ii.'||master_recnum_column||' < l.'||detail_recnum_column||') '||
' ) '||
' WHERE l.'||detail_masterunique_column||' = '||''''||detail_just_load_condition||'''';
dbms_output.put_line(v_sqlStmt);
EXECUTE IMMEDIATE v_SqlStmt;
END;
/