SKEはPostgreSQL、SQLServer、Oracle、MySQL(MariaDB)をサポートします。SKEを利用して、多種類DB対応のパッケージを作る場合の注意点を説明します。
テーブル名と項目名の日本語文字利用
テーブル名または項目名に日本語文字または英語大文字小文字混在の場合、二重引用符を付けてください。MySQLはANSIモードの設定により、二重引用符を認識するようにしています。もし、テーブルは、専用スキーマ内のものであれば、スキーマ名を付けるようにしてください。
"Myテーブル"."My項目"
myschema."Myテーブル"."My項目"
大文字小文字を区別せず全部ローマ字のみにすれば、設定しやすいかもしれませんが、リポジトリ定義の分かり易さのため、日本語名称の利用は否定しません。
DDLとANSIのデータ型
リポジトリ定義に関わるテーブルを自動作成したい場合、テーブルDDLを登録します。1種類DB対応だったら、そのDBのデータ型の記載方法に従えば大丈夫です。多種類DBに対応したい場合、ANSIに満たすデータ型の記載がほしいです。SKEのDDLに記載する場合、下表のDDL記載列をご参照ください。
データ型 | 既定名称 | DDL記載 |
---|---|---|
1、数型 | ||
1-1、真数型 | ||
狭範囲整数 | SMALLINT | @SMALLINT |
典型的整数 | INTEGER | @INTEGER |
広範囲整数 | BIGINT | @BIGINT |
固定小数点数(可変長) | DECIMAL(p, s) NUMERIC(p, s) |
@NUMERIC @DECIMAL
|
1-2、概数型 | ||
単精度的小数 | REAL | @REAL |
倍精度的小数 | DOUBLE PRECISION | @DOUBLE_PRECISION |
浮動小数点数 | FLOAT | FLOAT(n) | @FLOAT |
2、文字列型 | ||
固定長文字列 | CHARACTER(n) | @CHARACTER |
可変長文字列 | CHARACTER VARYING(n) | @CHARACTER_VARYING |
3、ブール型 | ||
ブール値 | BOOLEAN | @BOOLEAN |
4、日時型 | ||
日付 | DATE | @DATE |
時刻 | TIME | @TIME |
日時 | TIMESTAMP | @TIMESTAMP |
DDL文には一つのテーブルのCREATE文にしてください。そのテーブルの存在有無の記載は不要です。
初期化SQL
テーブル作成後、初期ユーザとか、マスタデータとか、insertのSQLを望まれます。この場合、初期化SQLをご利用ください。
定数をinsertのSQLに記載するため、Oracleの場合 DUAL
のダミーテーブルを記載しますが、ほかのDBはこのような記載は不要です。記載統一のため、以下の記載方法をご利用ください。
insert into "myTable"
・・・
@FROM_DUAL
注意点
「;」の記載不要
Oracleにとって「;」がある場合、JDBC経由のSQL実行はエラーが発生します。ほかのDBはこの制限がありません。
SQL文に複数SQLの記載禁止
OracleにとってJDBC経由のSQL実行は1回1つSQLしか実行できません。ほかのDBはこの制限がありません。
ANSI標準関数
個別DBの専用関数を利用しないでください。集計類と日付類のANSI関数のご利用ください。
関数 | 説明 |
---|---|
1、集計類 | |
COUNT(<値式>) | <値式>が指定されるならば,集約される行の個数 |
SUM(<値式>) | 集約される各行に対して評価される<値式>の合計 |
AVG(<値式>) | 集約される各行に対して評価される<値式>の平均 |
MAX(<値式>) | 集約される各行に対して評価される<値式>の最大値 |
MIN(<値式>) | 集約される各行に対して評価される<値式>の最小値 |
2、日付類 | |
CURRENT_DATE | 現在日付 |
CURRENT_TIME | 現在時間 |
CURRENT_TIMESTAMP | 現在タイムスタンプ |