DB2 for Linux, UNIX, and Windows 9.7 版

SQL 陳述式變更所帶來的升級影響

升級至 DB2® 9.7 版之後,DB2 9.7 版中 SQL 陳述式的變更會影響現存應用程式及 Script。

SQL 陳述式的變更包括新的預設行為及陳述式輸出的修改。此外,停止提供部分陳述式。下表列出影響應用程式及 Script 的變更:
表 1. SQL 陳述式的變更
SQL 陳述式 具有升級影響的變更摘要
ALTER FUNCTION
ALTER HISTOGRAM TEMPLATE
ALTER METHOD
ALTER NICKNAME
ALTER PROCEDURE、
ALTER SEQUENCE
ALTER SERVER
ALTER TABLE
ALTER TYPE (結構化)
ALTER USER MAPPING
ALTER VIEW
ALTER WRAPPER
ALTER XSROBJECT
由於 DB2 授權模型發生變更,SYSADM 群組不再獲得授權執行這些陳述式。UPGRADE DATABASE 指令將 DBADM 權限授與 SYSADM 群組,而未產生任何升級影響。然而,針對這些陳述式,您應該檢閱所有授權變更,並將任何必要授權授與使用者。

如果您在 DB2 9.7 版中建立資料庫,則將必要授權授與需要執行這些陳述式的使用者,或明確地將 DBADM 權限授與 SYSADM 群組,以維持與前版次相同的授權。

DB2_DDL_SOFT_INVAL 登錄變數設為 ON 時,在 ALTER FUNCTION 及 ALTER VIEW 陳述式上支援軟體失效。如需軟體失效語意的詳細資料,請參閱資料庫物件的自動失效及重新驗證

ALTER SERVICE CLASS
ALTER THRESHOLD
ALTER WORK ACTION SET
ALTER WORK CLASS SET
ALTER WORKLOAD
CREATE HISTOGRAM TEMPLATE
CREATE SERVICE CLASS
CREATE THRESHOLD
CREATE WORK ACTION SET
CREATE WORK CLASS SETCREATE WORKLOAD
由於 DB2 授權模型發生變更,SYSADM 群組不再獲得授權執行這些陳述式。UPGRADE DATABASE 指令將 DBADM 權限授與 SYSADM 群組,而未產生任何升級影響。然而,針對這些陳述式,您應該檢閱所有授權變更,並將任何必要授權授與使用者。

然而,如果您在 DB2 9.7 版中建立資料庫,則將必要授權授與需要執行這些陳述式的使用者,或明確地將 DBADM 或 WLMADM 權限授與 SYSADM 群組,以維持與前版次相同的授權。

ALTER DATABASE 現在,ADD STORAGE ON 子句可以與 ALTER DATABASE 陳述式一起發出,以啟用現存資料庫上的自動儲存體。在前版次中,會傳回 SQL20317N 錯誤訊息。此陳述式會建立維護自動儲存體所需的 SQLSGF.1SQLSGF.2 檔案。如需如何啟用自動儲存體的詳細資料,請參閱在升級的資料庫中採用新的 9.7 版功能
ALTER TABLE 現在,COMPRESS 子句會啟用表格及 XML 儲存體物件中的資料壓縮。如果您發出 ALTER TABLE 陳述式與 ADD COLUMN 子句以新增 XML 直欄,則 XML 資料的壓縮會視是否針對表格啟用資料橫列壓縮而定。

如果在 9.7 版以前的版次中所建立的具有 XML 直欄的表格中,發出 ALTER TABLE 陳述式與 COMPRESS YES 子句,則只支援表格資料壓縮。若要將 XML 儲存體物件轉換為支援 XML 資料壓縮的新 9.7 版格式,請重建表格。請參閱將 XML 儲存體物件轉換為 9.7 版格式,以取得詳細資料。

現在,可以一起使用 COMPRESS 及 DATA CAPTURE CHANGES 子句。現在,SQL 抄寫支援將已啟用資料橫列壓縮的表格作為來源及目標表格。如果以此陳述式同時指定兩個子句,並不會接收到錯誤。

現在,具有 ATTACH PARTITION 子句的 ALTER TABLE 陳述式,需要分割的表格與正在連接的表格中,利用結構化、XML 或 LOB 資料類型定義的直欄,具有相同的 INLINE LENGTH 值。如果在具有 XML 直欄的表格中發出此陳述式,則維護會在所有 XML 直欄路徑索引中執行,作為陳述式處理的一部分。

從 9.7 版 Fix Pack 1 開始,具有 DETACH PARTITION 子句的 ALTER TABLE 陳述式會與特定查詢同時存在。如需詳細資料,請參閱資料分割區分離階段

如果在具有 XML 直欄的表格中,發出具有 DETACH PARTITION 子句的 ALTER TABLE 陳述式,則會建立個別表格的 XML 直欄路徑索引,作為陳述式處理的一部分。

現在,分割的表格中支援 XML 直欄。當將具有 XML 直欄的表格連接或取消連接至分割的表格,或新增 XML 直欄至分割的表格時,ALTER TABLE 陳述式與 ADD COLUMN、ATTACH PARTITION 或 DETACH PARTITION 子句不再傳回原因碼為 2SQL1242N 錯誤訊息。

現在,您可以將具有 XML 類型的直欄新增至 MDC 表格。在前版次中,會傳回原因碼為 1 的 SQL1242N 錯誤訊息。

如需也套用至此指令的其他授權變更,請參閱 ALTER FUNCTION 陳述式橫列

CALL
CREATE ALIAS
CREATE EVENT MONITOR
CREATE FUNCTION
CREATE INDEX
CREATE INDEX EXTENSION
CREATE METHOD
CREATE NICKNAME
CREATE PROCEDURE
CREATE SCHEMA
CREATE SEQUENCE
CREATE SERVER
CREATE TABLE
CREATE TRANSFORM
CREATE TRIGGER
CREATE TYPE
CREATE TYPE MAPPING
CREATE VARIABLE
FLUSH EVENT MONITOR
FLUSH OPTIMIZATION PROFILE CACHE
FLUSH PACKAGE CACHE
RENAME
SET EVENT MONITOR STATE
SET INTEGRITY
由於 DB2 授權模型發生變更,SYSADM 群組不再獲得授權執行這些陳述式。UPGRADE DATABASE 指令將 DBADM 權限授與 SYSADM 群組,而未產生任何升級影響。然而,針對這些陳述式,您應該檢閱所有授權變更,並將任何必要授權授與使用者。

如果您在 DB2 9.7 版中建立資料庫,則將必要授權授與需要執行這些陳述式的使用者,或明確地將 DBADM 權限授與 SYSADM 群組,以維持與前版次相同的授權。

DB2_DDL_SOFT_INVAL 登錄變數設為 ON 時,在 CREATE ALIAS、CREATE FUNCTION、CREATE NICKNAME、CREATE PROCEDURE、CREATE TRIGGER 及 CREATE VARIABLE 陳述式上支援軟體失效。如需軟體失效語意的詳細資料,請參閱資料庫物件的自動失效及重新驗證

如果在 DB2 9.7 版中建立資料庫,auto_reval 配置參數依預設會設為 DEFERRED,以便啟用重新驗證延遲語意。 此設定可讓您建立視圖、函數、儲存程序、觸發程式及廣域變數,即使它們參照不存在或無效的物件。

CREATE VIEW
DECLARE CURSOR
DECLARE GLOBAL TEMPORARY TABLE
DELETE
INSERT
MERGE
REFRESH TABLE
SELECT INTO
SET 變數
UPDATE
由於 DB2 授權模型發生變更,SYSADM 群組不再獲得授權執行這些陳述式,且在部分情況下,DBADM 權限需求會由 DATAACCESS 權限取代。UPGRADE DATABASE 指令將 DBADM 權限授與 SYSADM 群組,並將 DATAACCESS 權限授與擁有 DBADM 權限的使用者,而未產生任何升級影響。然而,針對這些陳述式,您應該檢閱所有授權變更,並將任何必要授權授與使用者。

如果您在 DB2 9.7 版中建立資料庫,則將必要授權授與需要執行這些陳述式的使用者。您可以明確地將 DBADM 權限授與 SYSADM 群組,並將 DATAACCESS 權限授與擁有 DBADM 權限的使用者或兩者,以維持與前版次相同的授權。

DB2_DDL_SOFT_INVAL 登錄變數設為 ON 時,在 CREATE VIEW 陳述式上支援軟體失效。如需軟體失效語意的詳細資料,請參閱資料庫物件的自動失效及重新驗證

CALL 如果您已將 DEFAULT 指定為參數或變數名稱,則 DEFAULT 現在會解析為 DEFAULT 關鍵字。在前版次中,DEFAULT 解析為變數或參數,稱為 DEFAULT。當您想要解析為變數或參數 (稱為 DEFAULT) 時,請將大寫字母的字組 DEFAULT 定界限於雙引號中,如下列範例所示:
CALL (P1,"DEFAULT");

如需也套用至此指令的其他授權變更,請參閱 CALL 陳述式橫列

COMMENT 由於 DB2 授權模型發生變更,SYSADM 群組不再獲得授權執行這些陳述式。UPGRADE DATABASE 指令將 DBADM 權限授與 SYSADM 群組,而未產生任何升級影響。然而,針對這些陳述式,您應該檢閱所有授權變更,並將任何必要授權授與使用者。同時,需要 WLMADM 權限才能加註工作量管理物件。

如果您在 DB2 9.7 版中建立資料庫,則將必要授權授與需要執行這些陳述式的使用者,或明確地將 DBADM 權限授與 SYSADM 群組,以維持與前版次相同的授權。

CONNECT 如果啟用 HADR 備用資料庫上的讀取功能,則可以連接至這些資料庫,但資料庫在進行接管而切換角色時除外。在前版次中,會傳回 SQL1776N 錯誤訊息。
CREATE INDEX 當您在已啟用資料橫列壓縮的表格中建立索引時,依預設索引會啟用壓縮。如果已停用資料橫列壓縮,則會停用索引壓縮。如果您必須停用索引壓縮,請使用 COMPRESS NO 子句。

當您在 XML 直欄上建立索引時,現在會支援線上索引建立。 此支援需要其他日誌空間及索引表格空間。其他需求與關聯式索引上的線上索引建立相同。

當您針對分割的表格建立索引時,預設會將它們建立為分割索引。如果您必須建立未分割的索引,請使用 NOT PARTITIONED 子句。空間索引及具有索引鍵直欄的唯一索引 (不是範圍分割索引鍵直欄的超集) 不支援分割的索引。

如需也套用至此指令的其他授權變更,請參閱 CALL 陳述式橫列

CREATE PROCEDURE (SQL) 陳述式 如果您在 SQL 程序中宣告稱為 TRUE 或 FALSE 的變數,則此陳述式會傳回 SQL0408N 錯誤訊息,並無法建立程序。請修改程序碼,並變更變數名稱,然後重新發出 CREATE PROCEDURE 陳述式。

在 SQL 程序中,當您指派 XML 資料至 XML 類型的輸入及輸出參數或 XML 類型的區域變數時,XML 資料目前是依參照傳遞。在前版次中,是依值傳遞 XML 資料。因此,部分使用 XML 資料的作業所傳回的結果,可能與前版次的相同作業所傳回的結果不同。

CREATE TABLE 現在,COMPRESS 子句會啟用表格及 XML 儲存體物件中的資料壓縮。如果您發出 ALTER TABLE 陳述式與 ADD COLUMN 子句以新增 XML 直欄,則 XML 資料的壓縮會視是否針對表格啟用資料橫列壓縮而定。

現在,可以一起使用 COMPRESS 及 DATA CAPTURE CHANGES 子句。現在,SQL 抄寫支援將已啟用資料橫列壓縮的表格作為來源及目標表格。如果以此陳述式同時指定兩個子句,並不會接收到錯誤。

現在,您可以在建立分割的表格時,使用 XML 類型指定直欄。在前版次中,會傳回原因碼為 2 的 SQL1242N 錯誤訊息。分割的表格上的 XML 資料放置會遵循長資料放置規則。XML 儲存體物件及 XML 區域索引的分割方式與表格資料相同。

現在,您可以指定具有 XML 類型的直欄,並在 CREATE TABLE 陳述式中使用 ORGANIZE BY 子句。如果您在 ORGANIZE BY 子句中指定具有 XML 類型的直欄,則會接收到 SQL0350N 錯誤訊息。在前版次中,會傳回原因碼為 1 的 SQL1242N 錯誤訊息。

現在,分割的表格中支援 XML 直欄。當在相同的表格中定義配送鍵及 XML 直欄時,CREATE TABLE 陳述式不再傳回原因碼為 4SQL1242N 錯誤訊息。然而,XML 直欄無法用來定義配送鍵。

當您建立分割的表格時,系統會產生主要索引鍵的索引,且預設會一律分割唯一限制。 如果您建立具有 XML 直欄的分割表格,則會一律分割 XML 區域索引,但不會分割 XML 直欄路徑索引。 請參閱 SQL Reference,以取得詳細資料。

NOT LOGGED 選項只適用於未列入的 LOB 資料。在升級的資料庫中,當長度小於 LOB 描述子大小時,會隱含地列入 LOB 資料。在此情況下,NOT LOGGED 選項不適用於隱含列入的 LOB 資料。

現在,當您在表格上建立新的索引時,COMPRESS YES 子句除了會資料橫列壓縮之外,還會啟用索引壓縮。如果您必須停用索引壓縮,請使用 CREATE INDEX 陳述式與 COMPRESS NO 子句。

如需也套用至此指令的其他授權變更,請參閱 CALL 陳述式橫列

CREATE TABLESPACE 無論資料庫是否啟用自動儲存體,當您建立新的 DMS 表格空間時,可收回儲存體為預設值。可收回儲存體是新的功能,可讓您減少表格空間高臨界值,並可收回空間。如需升級的資料庫中可收回儲存體的詳細資料,請參閱在升級的資料庫中採用新的 9.7 版功能
DECLARE GLOBAL TEMPORARY TABLE 在暫存表格中,依預設會啟用資料橫列壓縮。然而,只有當資料庫管理程式判定具有效能增益時,才會壓縮橫列。因此,也會針對您在暫存表格上建立的索引,啟用索引壓縮。

DISTRIBUTE BY 子句會取代 PARTITIONING KEY 子句。為了與前版次相容,您仍可以使用 PARTITIONING KEY 子句。

如需也套用至此指令的其他授權變更,請參閱 CREATE VIEW 陳述式橫列

DROP 由於 DB2 授權模型發生變更,SYSADM 群組不再獲得授權執行此陳述式。同時,您可能需要擁有 SECADM、SQLADM 或 WLMADM 權限,才能捨棄特定物件。如需授權中所有變更的詳細資料,請參閱 SQL Reference

DB2_DDL_SOFT_INVAL 登錄變數設為 ON 時,在 DROP ALIAS、DROP FUNCTION、DROP TRIGGER、DROP VARIABLE 及 DROP VIEW 陳述式上支援軟體失效。如需軟體失效語意的詳細資料,請參閱資料庫物件的自動失效及重新驗證

從 9.7 版 Fix Pack 1 開始,DROP WORKLOAD 陳述式有新的選用子句 RESTRICT。現在,若捨棄已套用活動臨界值或工作動作集的工作量,便會傳回 SQL2090N 錯誤訊息。RESTRICT 子句是預設值。在捨棄工作量之前,您必須先捨棄任何已套用的活動臨界值或工作動作集。

GRANTREVOKE 已變更執行這些陳述式的授權。現在,您需要擁有 SECADM 權限才能授與 ACCESSCTRL、DATAACCESS、DBADM 或 SECADM 權限,以及擁有 ACCESSCTRL 或 SECADM 權限才能授與下列項目的其他權限或專用權:廣域變數、索引、套件、常式、綱目、順序、伺服器、表格、視圖、暱稱、工作量及 XSR 物件。相同的變更適用於 REVOKE 陳述式。

UPGRADE DATABASE 指令明確地將 DBADM 權限授與 SYSADM 群組,並明確地將 ACCESSCTRL 及 DATAACCESS 權限授與擁有 DBADM 權限的使用者。升級之後,將 SECADM 權限授與需要授與 ACCESSCTRL、DATAACCESS、DBADM 或 SECADM 權限的使用者。

字首運算子 + (單運算元加號) 及字首運算子 - (單運算元減號) 現在,非類型化參數標記為運算元之字首運算子 + 或字首運算子 - 的結果資料類型為 DECFLOAT(34)。在前版次中,結果資料類型為 DOUBLE。

預期 DOUBLE 的應用程式可能接收到 SQL0440N 錯誤訊息。使用 DOUBLE 純量函數明確地強制轉型非類型化參數標記為運算元之字首運算子 + 或字首運算子 - 的結果資料類型。

SET 變數 如果您已將 DEFAULT 指定為值來指派給變數,則現在 DEFAULT 會解析為 DEFAULT 關鍵字。如果 DEFAULT 關鍵字的使用無效,則它現在會傳回 SQL0584N 錯誤訊息。在前版次中,DEFAULT 會作為值解析為變數或參數 (稱為 DEFAULT),且當沒有定義此類變數或參數時,只傳回 SQL0584N。當您想要解析為變數或參數 (稱為 DEFAULT) 時,請將大寫字母的字組 DEFAULT 定界限於雙引號中,如下列範例所示:
CREATE PROCEDURE FOO(IN DEFAULT INTEGER)
BEGIN 
  DECLARE V0 INTEGER DEFAULT 1;
  SET V0 = "DEFAULT";
  RETURN V0;
END%

如需也套用至此指令的其他授權變更,請參閱 CREATE VIEW 陳述式橫列

表示式中非類型化 NULL 關鍵字 現在,您可以在表示式的任何位置指定非類型化 NULL 關鍵字。如果您在 SQL 陳述式中使用稱為 NULL 的 ID (例如直欄名稱或參數名稱) 而未指定完整的名稱或以雙引號括住,則所指定的 ID 可能解析為關鍵字 NULL,而非 ID 名稱。若要避免與非類型化 NULL 關鍵字的衝突,請指定完整的名稱或在 SQL 陳述式中將名為 NULL 的直欄用雙引號括住,如下列範例中所示:
SELECT MY_TAB.NULL FROM MY_TAB
SELECT "NULL" FROM MY_TAB