機械翻訳について

スキーマ定義

スキーマ定義では、柔軟性を維持しながらデータセット構造を制御できます。

スキーマ定義には次の特性があります。
  • データセットに対して事前定義または上書きされたデータ型およびフォーマットを許可します。
  • 必要な調整を許可しながら、複数のデータセットにわたって均一性を提供します。
  • スキーマをテンプレートとして個別に定義したり、データセット内にインライン文として埋め込むことができます。
  • スキーマを個別に定義している場合、データセット内で名前で参照できます。
  • コード・ブロックを埋め込むと、コード・ブロックの一部になります。 コード・ブロックを参照してください。

構文

データセット定義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 Definition
template_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