7.3 資料庫特性

7.3.1 資料庫功能

Table 7-2 資料庫功能

資料庫

綱要

檢視窗

身份欄

序列

預存程序

函數

觸發

取代觸發

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 具有稱為規則的原始建構元。 這個建構元可用來有效地模擬觸發和取代觸發。 它還支援使用以各種程序設計語言撰寫的觸發或取代觸發。

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 綱要名稱.程序名稱(參數清單)}

Informix IDS

EXECUTE [PROCEDURE | FUNCTION] 綱要名稱.常式名稱(參數清單)

MSSQL

EXECUTE 綱要名稱.程序名稱(參數清單)

MySQL

(NA)

Oracle1

CALL 綱要名稱.程序名稱(參數清單)

PostgreSQL

SELECT 綱要名稱.程序名稱(參數清單)

Sybase ASE

EXECUTE 綱要名稱.程序名稱(參數清單)

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:10g 版的 Oracle 支援 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 受支援的異動隔離層級

資料庫

讀取未認可

讀取認可

可重複讀取

可序列化

URL

IBM DB2 UDB

0

X

X1

X

X

設定 JDBC 異動隔離層級

MySQL (InnoDB 表格類型)

0

X

X

X1

X

InnoDB 異動隔離層級

Oracle

0

0

X1

0

X

JDBC 異動最佳化

PostgreSQL

0

02

X1

02

X

異動隔離

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 綱要名稱.程序名稱(參數清單)}

區分大小寫?

認可關鍵字

COMMIT

左外部結合運算子

LEFT OUTER JOIN

動態預設值

下表列出 Driver for JDBC 在執行時期以隱含方式設定的資料庫相容性參數。 請勿明確地置換這些設定。

Table 7-10 以動態方式設定的 IBM DB2 Universal Database 設定

顯示名稱

標籤名稱

目前時戳陳述式:

current-timestamp-stmt

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

「時戳轉譯程式」類別:

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] 綱要名稱.程序名稱(參數清單)

區分大小寫?

認可關鍵字

COMMIT WORK1

左外部結合運算子

LEFT OUTER JOIN

1 適用於記錄和 ANSI 相容的資料庫。 非記錄資料庫不支援異動。

動態預設值

下表列出 Driver for JDBC 在執行時期以隱含方式設定的資料庫相容性參數。 請勿明確地覆寫這些設定。

Table 7-12 以動態方式設定的 Informix Dynamic Server 設定

顯示名稱

標籤名稱

目前時戳陳述式:

current-timestamp-stmt

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

已知問題

  • 除非在建立表格時明確地將小數位數 (小數點右邊的位數) 設為 0,否則無法將 NUMERICDECIMAL 欄用做主索引鍵。 在預設狀態下,小數位數設為 255。

7.3.10 Microsoft SQL Server

下表列出此資料庫的內容:

Table 7-13 Microsoft SQL Server 的設定

內容

目前時戳陳述式

SELECT (CURRENT_TIMESTAMP)

預存程序/函數呼叫語法

EXECUTE 綱要名稱.程序名稱(參數清單)

區分大小寫?

認可關鍵字

GO

左外部結合運算子

*=

動態預設值

下表列出 Driver for JDBC 在執行時期以隱含方式設定的資料庫相容性參數。 請勿明確地覆寫這些設定。

Table 7-14 以動態方式設定的 Microsoft SQL Server 設定

顯示名稱

標籤名稱

插入時新增預設值?

add-default-values-on-view-insert

true

左外部結合運算子:

left-outer-join-operator

*=

7.3.11 MySQL

下表列出此資料庫的內容。

Table 7-15 MySQL 的設定

內容

目前時戳陳述式

SELECT (CURRENT_TIMESTAMP)

預存程序/函數呼叫語法

(NA)

區分大小寫?

認可關鍵字

COMMIT

左外部結合運算子

LEFT OUTER JOIN

動態預設值

下表列出此資料庫在執行時期以動態方式設定的資料庫相容性參數。

Table 7-16 以動態方式設定的 MySQL 設定

顯示名稱

標籤名稱

支援在中繼資料取回時使用綱要?

supports-schemas-in-metadata-retrieval

false

已知問題

  • 在將 TIMESTAMP 欄啟始設為 0 或 NULL 之後進行更新時,會一律將其設為目前的日期和時間。 若要彌補此行為,建議您將「Identity Vault 時間和時戳」語法映射至 DATETIME 欄。

7.3.12 Oracle

下表列出此資料庫的內容:

Table 7-17 Oracle 的設定

內容

目前時戳陳述式

SELECT (SYSDATE) FROM SYS.DUAL

預存程序/函數呼叫語法

CALL 綱要名稱.程序名稱(參數清單)

區分大小寫?

認可關鍵字

COMMIT

左外部結合運算子

(+)

動態預設值

下表列出 Driver for 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 RAWBLOB 欄。 您無法藉由在觸發 (包含取代觸發) 中使用 :NEW 修飾詞來參考這些類型的欄。

7.3.13 PostgreSQL

下表列出此資料庫的內容:

Table 7-19 PostgreSQL 的設定

內容

目前時戳陳述式

SELECT (CURRENT_TIMESTAMP)

預存程序/函數呼叫語法

SELECT 綱要名稱.程序名稱(參數清單)

區分大小寫?

認可關鍵字

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 綱要名稱.程序名稱(參數清單)

區分大小寫?

認可關鍵字

GO

左外部結合運算子

*=

動態預設值

下表列出 Driver for JDBC 在執行時期以隱含方式設定的資料庫相容性參數。 請勿明確地覆寫這些設定。

Table 7-21 以動態方式設定的 Sybase ASE 設定

顯示名稱

標籤名稱

目前時戳陳述式

current-timestamp-stmt

SELECT GETDATE()

左外部結合運算子

left-outer-join-operator

*=

「時戳轉譯程式」類別

time-translator-class

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

已知問題

  • 填補和截短二進位值。

    若要確保二進位值 ANSI 相容的填補和截短行為,請確定二進位欄類型 (而不是 IMAGE) 符合下列準則:

    • 它們的大小與映射至它們的 eDirectory™ 屬性大小完全相同。
    • 它們會限制為 NOT NULL
    • 它們會新增至「發行者建立規則」和「訂閱者建立規則」。

    如果它們限制為 NULL,則對 eDirectory 有效之行尾的零會截短。 如果二進位欄超出它們各自的 eDirectory 屬性大小,則額外的 0 會附加至該值。

    建議的解決方案是在同步化二進位值時只使用 IMAGE 資料類型。

  • 秒的 DATETIME 分數會四捨五入。 「Sybase 時戳」最精確可到 1/300 秒 (大約 .003 秒)。 資料庫伺服器則四捨五入到最接近的 1/300 秒,而不是 1/1000 秒 (.001 秒或 1 毫秒)。
  • 時戳格式是專屬的。