スキーマ定義
スキーマ定義では、柔軟性を維持しながらデータセット構造を制御できます。
スキーマ定義には次の特性があります。
- データセットに対して事前定義または上書きされたデータ型およびフォーマットを許可します。
- 必要な調整を許可しながら、複数のデータセットにわたって均一性を提供します。
- スキーマをテンプレートとして個別に定義したり、データセット内にインライン文として埋め込むことができます。
- スキーマを個別に定義している場合、データセット内で名前で参照できます。
- コード・ブロックを埋め込むと、コード・ブロックの一部になります。 コード・ブロックを参照してください。
構文
データセット定義code_blockのスキーマ文(template_schema_statementまたは builtin_schema_statement)の詳細は、汎用データセット定義を参照してください。
スキーマ定義ルール
- 列データ型は必須です。
PRIMARYKEYはオプションです。 - デフォルトでは、明示的に指定しないかぎり、すべての列はNULL値可能です。
- スキーマに
PRIMARYKEYを定義しない場合は、ソース・データセットによって指定する必要があります。
競合解決
- 主キー
- スキーマとデータセットの両方で
PRIMARYKEYを定義する場合、データセット値が優先されます。 - 行ソース結合を含むデータセットでは、スキーマですでに指定している場合は、データセットから
PRIMARYKEYを省略できます。
- スキーマとデータセットの両方で
- データ型
- スキーマとデータセットの両方に列のデータ型を定義する場合、データセットに指定するデータ型はスキーマのデータセットをオーバーライドします。
列の不一致処理
列がスキーマまたはデータセットのいずれかに存在し、両方に存在しない場合、その包含およびプロパティは次のように決定されます。
- データセット内の余分な列: データセットに列が表示されるが、スキーマには表示されない場合は、そのプロパティがソースから導出されます。
- スキーマの余分な列: スキーマに列を定義し、データセットにマップしない場合、主キーの一部でないかぎり無視されます。 その場合は、警告が発行されます。
スキーマ・テンプレート定義
データセット定義コード・ブロックであるDEFINE SCHEMAを使用して、データセット定義とは別にスキーマを定義し、それを参照して任意のデータセットに適用できます。
構文:
schema_definition ::= DEFINE SCHEMA schema_name
'[ '
column_name data_type [ PRIMARYKEY ] [ nullable_flag ]
[,column_name data_type [ PRIMARYKEY ] [ nullable_flag ]] ...
']'
END
schema_name ::= identifier
template_schema_statement ::= SCHEMA schema_name ; //used in Dataset Definitiontemplate_schema_statementで定義されたデータセットの例:IMPORT SOURCE CUSTOMERS
DEFINE SCHEMA CUSTOMERS_D_SCHEMA
[
CUST_ID NUMBER(38,0) PRIMARYKEY,
CUST_LAST_NAME VARCHAR2(32),
CUST_CITY_ID NUMBER(38,0),
CUST_VALID VARCHAR2(32),
CUST_EFF_FROM DATE NOT NULL,
CUST_EFF_TO DATE
]
END
//Usage in Dataset Definition
DEFINE DATASET CUSTOMERS_D
SCHEMA CUSTOMERS_D_SCHEMA;
ROWSOURCE CUSTOMERS;
THIS = CUSTOMERS;
END
インライン・スキーマ定義
データセット定義コード・ブロック内で、データセット定義内でスキーマを直接定義し、その特定のデータセットにのみ適用できます。
構文:
builtin_schema_statement ::= SCHEMA
'[ '
column_name data_type [ PRIMARYKEY ] [ nullable_flag ]
[,column_name data_type [ PRIMARYKEY ] [ nullable_flag ]] ...
']' ;
builtin_schema_statementで定義されたデータセットの例:DEFINE DATASET INS_CUSTOMERS_D
SCHEMA
[
CUST_ID NUMBER(38,0) PRIMARYKEY,
CUST_LAST_NAME. VARCHAR2(32),
CUST_CITY_ID NUMBER(38,0),
CUST_VALID VARCHAR2(32),
CUST_EFF_FROM DATE NOT NULL,
CUST_EFF_TO DATE
];
ROWSOURCE CUSTOMERS;
THIS = CUSTOMERS;
END
コード・ブロック・ロードおよびスキーマ定義
データセット定義内の増分ロードからフル・ロード・コードを分離すると、インライン・スキーマはcode_block_loadの先頭に定義されます。
template_schema_statementで定義されたcode_block_loadの例:DEFINE DATASET FL_CUSTOMERS_D
SCHEMA CUSTOMERS_D_SCHEMA;
ON FULL LOAD
ROWSOURCE CUSTOMERS WHERE CUSTOMERS.CUST_VALID = âAâ;
THIS = CUSTOMERS;
INCREMENTAL LOAD
ROWSOURCE CUSTOMERS;
THIS = CUSTOMERS;
ENDLOAD
END
builtin_schema_statementで定義されたcode_block_loadの例:DEFINE VERSIONED DATASET INSCH_FL_CUSTOMERS_CF
SCHEMA
[
CUST_ID NUMBER(38,0) PRIMARYKEY,
CUST_LAST_NAME VARCHAR2(32),
CUST_CITY_ID NUMBER(38,0),
CUST_VALID VARCHAR2(32),
CUST_EFF_FROM DATE NOT NULL,
CUST_EFF_TO DATE
];
ON FULL LOAD
ROWSOURCE CUSTOMERS WHERE CUSTOMERS.CUST_VALID = âAâ;
THIS = CUSTOMERS;
INCREMENTAL LOAD
ROWSOURCE CUSTOMERS;
THIS = CUSTOMERS;
ENDLOAD
END