7.3 データベースの特性

7.3.1 データベースの機能

Table 7-2 データベースの機能

データベース

スキーマ

ビュー

識別列

シーケンス

ストアドプロシージャ

関数

トリガ

instead-of-trigger

IBM DB2 UDB 7

X

X

X

0

X1

X1

X

0

IBM DB2 UDB 8

X

X

X

0

X1

X1

X

X

Informix IDS 9

X

X

X2

0

X3

X

X

0

MS SQL 7

X

X

X

0

X

0

X

0

MS SQL 8

X

X

X

0

X

X

X

X

MySQL 4

0

0

X4

0

0

0

0

0

Oracle 8i、9i、10g

X

X

0

X

X

X

X

X

Postgres 7

X

X

X5

X

X

X

X6

X6

Sybase ASE 12

X

X

X

0

X

0

X

0

1 DB2は、Javaで記述されたストアドプロシージャまたは関数をネイティブでサポートしています。ネイティブのSQL手続き型言語を使用してプロシージャを記述するには、データベースサーバにCコンパイラをインストールします。

2 Informix識別列キーワードは、SERIAL8です。

3 Informixのストアドプロシージャは、値を返すことができません。

4 MySQL識別列キーワードは、AUTO_INCREMENTです。

5 Postgresシーケンスオブジェクトを使用して、プライマリキー列のデフォルト値を提供できるので、実質的に識別列をシミュレートできます。

Postgresには、ルールと呼ばれるネイティブの構成体があります。この構成体を使用して、トリガおよびinstead-of-triggerを実質的にシミュレートできます。また、さまざまな手続き型プログラミング言語で記述されたトリガまたはinstead-of-triggerの使用もサポートしています。

7.3.2 現在のタイムスタンプステートメント

次の表は、現在の日付および時刻を取得するために使用されるSQLステートメントをデータベース別に示したものです。

Table 7-3 タイムスタンプステートメント

データベース

現在のタイムスタンプステートメント

ANSI互換

IBM DB2 UDB

SELECT (CURRENT TIMESTAMP) FROM SYSIBM.SYSDUMMY1 FETCH FIRST 1 ROW ONLY

×

Informix IDS

SELECT FIRST 1 (CURRENT YEAR TO FRACTION(5)) FROM INFORMIX.SYSTABLES

×

MSSQL

SELECT (CURRENT_TIMESTAMP)

MySQL

SELECT (CURRENT_TIMESTAMP)

Oracle

SELECT (SYSDATE) FROM SYS.DUAL

×

PostgreSQL

SELECT (CURRENT_TIMESTAMP)

Sybase ASE

SELECT GETDATE()

×

7.3.3 ストアドプロシージャおよび関数のJDBC呼び出しの構文

次の表は、ストアドプロシージャまたは関数を呼び出すためのSQL構文のリストです。これは、埋め込みSQLステートメント内のプロシージャおよび関数呼び出しのフォーマットに役立ちます。

Table 7-4 ストアドプロシージャまたは関数の呼び出し

データベース

ストアドプロシージャ/関数のJDBC呼び出し構文

IBM DB2 UDB

{call schema-name.procedure-name(parameter-list)}

Informix IDS

EXECUTE [PROCEDURE | FUNCTION] schema-name.routine-name(parameter-list)

MSSQL

EXECUTE schema-name.procedure-name(parameter-list)

MySQL

(該当なし)

Oracle1

CALL schema-name.procedure-name(parameter-list)

PostgreSQL

SELECT schema-name.procedure-name(parameter-list)

Sybase ASE

EXECUTE schema-name.procedure-name(parameter-list)

1 OracleのJDBC実装では、文字列としての関数呼び出しはサポートされていません。

7.3.4 左外部結合演算子

次の表は、データベース別の外部結合演算子のリストです。

Table 7-5 外部結合演算子

データベース

左外部結合演算子

ANSI互換

IBM DB2 UDB

LEFT OUTER JOIN

Informix IDS

LEFT OUTER JOIN

MSSQL

*=

×

MySQL

LEFT OUTER JOIN

Oracle

(+)

×

PostgreSQL

LEFT OUTER JOIN

Sybase ASE

*=

×

NOTE:Oracleは、バージョン10gからANSI互換の左外部結合演算子LEFT OUTER JOINをサポートしています。

7.3.5 区切りのない識別子での大文字と小文字の区別

Table 7-6 区切りのない識別子での大文字と小文字の区別

データベース

大文字と小文字の区別

IBM DB2 UDB

×

Informix IDS

×

MSSQL

×

MySQL

Oracle

×

PostgreSQL

×

Sybase ASE

7.3.6 サポートされているトランザクション分離レベル

Table 7-7 サポートされているトランザクション分離レベル

データベース

なし

read uncommitted

read committed

repeatable read

serializable

URL

IBM DB2 UDB

0

X

X1

X

X

JDBCトランザクションの分離レベルの設定

MySQL (InnoDBテーブルタイプ)

0

X

X

X1

X

InnoDB Transaction Isolation Levels

Oracle

0

0

X1

0

X

JDBC Transaction Optimization

PostgreSQL

0

02

X1

02

X

Transaction Isolation

1 これは、このデータベースのデフォルト分離レベルです。2 設定はできますが、サポートされている分離レベルに引き上げられます。

7.3.7 コミットキーワード

次の表は、サポートされているデータベースのコミットキーワードを示します。

Table 7-8 コミットキーワード

データベース

コミットキーワード

IBM DB2 UDB

COMMIT

Informix IDS

COMMIT WORK1

MSSQL

GO

MySQL

COMMIT

Oracle

COMMIT

PostgreSQL

COMMIT

Sybase ASE

GO

1 ANSI互換のログデータベース用。ログデータベース以外のデータベースではトランザクションをサポートしません。

7.3.8 IBM DB2 Universal Database (UDB)

次の表は、このデータベースのプロパティのリストです。

Table 7-9 IBM DB2 UDBのプロパティ

プロパティ

現在のタイムスタンプステートメント

SELECT (CURRENT TIMESTAMP) FROM SYSIBM.SYSDUMMY1 FETCH FIRST 1 ROW ONLY

ストアドプロシージャ/関数の呼び出し構文

{call schema-name.procedure-name(parameter-list)}

大文字と小文字を区別?

×

コミットキーワード

COMMIT

左外部結合演算子

LEFT OUTER JOIN

動的なデフォルト

次の表は、ランタイム時にJDBC用ドライバが暗黙的に設定するデータベース互換性パラメータのリストです。これらの設定を明示的に上書きしないでください。

Table 7-10 動的に設定されるIBM DB2 Universal Database設定

表示名

タグ名

現在のタイムスタンプステートメント:

current-timestamp-stmt

SELECT (CURRENT TIMESTAMP) FROM SYSIBM.SYSDUMMY1 FETCH FIRST 1 ROW ONLY

Timestamp Translator class: (タイムスタンプトランスレータクラス:)

time-translator-class

com.novell.nds.dirxml.driver.jdbc.db.DB2Timestamp

既知の問題

  • 独自のタイムスタンプ形式が使用されます。 既知の問題を参照してください。

7.3.9 Informix Dynamic Server (IDS)

次の表は、このデータベースのプロパティのリストです。

Table 7-11 Informix Dynamic Serverの設定

プロパティ

現在のタイムスタンプステートメント

SELECT FIRST 1 (CURRENT YEAR TO FRACTION(5)) FROM INFORMIX.SYSTABLES

ストアドプロシージャ/関数の呼び出し構文

EXECUTE [PROCEDURE | FUNCTION] schema-name.procedure-name(parameter-list)

大文字と小文字を区別?

×

コミットキーワード

COMMIT WORK1

左外部結合演算子

LEFT OUTER JOIN

1 ログデータベースおよびANSI互換のデータベース用。ログデータベース以外ではトランザクションはサポートされません。

動的なデフォルト

次の表は、ランタイム時にJDBC用ドライバが暗黙的に設定するデータベース互換性パラメータのリストです。これらの設定を明示的に上書きしないでください。

Table 7-12 動的に設定されるInformix Dynamic Server設定

表示名

タグ名

現在のタイムスタンプステートメント:

current-timestamp-stmt

SELECT FIRST 1 (CURRENT YEAR TO FRACTION(5)) FROM INFORMIX.SYSTABLES

既知の問題

  • NUMERICまたはDECIMAL列は、テーブルが作成されたときにスケール(小数点の右側の桁数)が明示的に0に設定されている場合以外は、プライマリキーとして使用できません。デフォルトで、スケールは255に設定されます。

7.3.10 Microsoft SQL Server

次の表は、このデータベースのプロパティのリストです。

Table 7-13 Microsoft SQL Server 2000の設定

プロパティ

現在のタイムスタンプステートメント

SELECT (CURRENT_TIMESTAMP)

ストアドプロシージャ/関数の呼び出し構文

EXECUTE schema-name.procedure-name(parameter-list)

大文字と小文字を区別?

×

コミットキーワード

GO

左外部結合演算子

*=

動的なデフォルト

次の表は、ランタイム時にJDBC用ドライバが暗黙的に設定するデータベース互換性パラメータのリストです。これらの設定を明示的に上書きしないでください。

Table 7-14 動的に設定されるMicrosoft SQL Server設定

表示名

タグ名

Add Default Values on Insert? (挿入時にデフォルト値を追加しますか?)

add-default-values-on-view-insert

true

左外部結合演算子:

left-outer-join-operator

*=

7.3.11 MySQL

次の表は、このデータベースのプロパティのリストです。

Table 7-15 MySQLの設定

プロパティ

現在のタイムスタンプステートメント

SELECT (CURRENT_TIMESTAMP)

ストアドプロシージャ/関数の呼び出し構文

(該当なし)

大文字と小文字を区別?

コミットキーワード

COMMIT

左外部結合演算子

LEFT OUTER JOIN

動的なデフォルト

次の表は、ランタイム時にJDBC用ドライバがこのデータベースのために動的に設定するデータベース互換性パラメータのリストです。

Table 7-16 動的に設定されるMySQL設定

表示名

タグ名

メタデータの取得でスキーマをサポートしますか?

supports-schemas-in-metadata-retrieval

false

既知の問題

  • TIMESTAMP列は、最初に0またはNULLに設定された後に更新される場合は、常に現在の日付および時刻に設定されます。この動作に対処するために、アイデンティティボールトの時間およびタイムスタンプの構文をDATETIME列にマップすることをお勧めします。

7.3.12 Oracle

次の表は、このデータベースのプロパティのリストです。

Table 7-17 Oracleの設定

プロパティ

現在のタイムスタンプステートメント

SELECT (SYSDATE) FROM SYS.DUAL

ストアドプロシージャ/関数の呼び出し構文

CALL schema-name.procedure-name(parameter-list)

大文字と小文字を区別?

×

コミットキーワード

COMMIT

左外部結合演算子

(+)

動的なデフォルト

次の表は、ランタイム時にJDBC用ドライバが暗黙的に設定するデータベース互換性パラメータのリストです。これらの設定を明示的に上書きしないでください。

Table 7-18 動的に設定されるOracle設定

表示名

タグ名

左外部結合演算子

left-outer-join-operator

(+)

フィルタ式を除く

exclude-table-filter

BIN\$.{22}==\$0

ステートメントジェネレータクラスのロック

lock-generator-class

com.novell.nds.dirxml.driver.jdbc.db.lock.OraLockGenerator

NOTE:デフォルトの除外フィルタは、Oracle 10gで表示されるドロップ済みテーブルを同期スキーマから省略するためのものです。

制限

  • トリガでは、LONGLONG RAW、およびBLOB列を参照できません。 instead-of-triggerを含むトリガ内で:NEW修飾子を使用して、これらのタイプの列を参照することはできません。

7.3.13 PostgreSQL

次の表は、このデータベースのプロパティのリストです。

Table 7-19 PostgreSQLの設定

プロパティ

現在のタイムスタンプステートメント

SELECT (CURRENT_TIMESTAMP)

ストアドプロシージャ/関数の呼び出し構文

SELECT schema-name.procedure-name(parameter-list)

大文字と小文字を区別?

×

コミットキーワード

COMMIT

左外部結合演算子

LEFT OUTER JOIN

既知の問題

  • PostgreSQLは<check-object-password>イベントをサポートしていません。認証は、pg_hba.confファイルにエントリを手動で挿入して制御します。

7.3.14 Sybase Adaptive Server Enterprise (ASE)

次の表は、このデータベースのプロパティのリストです。

Table 7-20 Sybase ASEの設定

プロパティ

現在のタイムスタンプステートメント

SELECT GETDATE()

ストアドプロシージャ/関数の呼び出し構文

EXECUTE schema-name.procedure-name(parameter-list)

大文字と小文字を区別?

コミットキーワード

GO

左外部結合演算子

*=

動的なデフォルト

次の表は、ランタイム時にJDBC用ドライバが暗黙的に設定するデータベース互換性パラメータのリストです。これらの設定を明示的に上書きしないでください。

Table 7-21 動的に設定されるSybase ASE設定

表示名

タグ名

現在のタイムスタンプステートメント

current-timestamp-stmt

SELECT GETDATE()

左外部結合演算子

left-outer-join-operator

*=

Timestamp Translator class (タイムスタンプトランスレータクラス)

time-translator-class

com.novell.nds.dirxml.driver.jdbc.db.SybaseTimestamp

既知の問題

  • バイナリ値のパディングおよび切り捨てに注意が必要です。

    バイナリ値でANSI互換のパディングおよび切り捨ての動作に準拠するために、バイナリ列タイプ(IMAGEを除く)が次の条件を満たすようにします。

    • マップ元のeDirectory™属性のサイズとまったく同じである。
    • NOT NULL制約がない。
    • 発行者作成ポリシーおよび購読者作成ポリシーに追加される。

    NULL制約がある場合は、eDirectoryでは有効である末尾のゼロ(0)が切り捨てられます。バイナリ列が、対応するeDirectory属性のサイズより大きい場合は、値の末尾に0が付加されます。

    解決方法として、バイナリ値を同期する場合はIMAGEデータタイプだけを使用することをお勧めします。

  • DATETIMEの秒の小数部が丸められます。 Sybaseのタイムスタンプの最高精度は1/300秒(約.003秒)です。データベースサーバは、最も近い1/1000秒(.001秒または1ミリ秒)単位の値ではなく、最も近い1/300秒単位の値に丸められます。
  • 独自のタイムスタンプ形式が使用されます。