ALTER FUNCTION(SQL 表格)
ALTER FUNCTION (SQL 表格) 陳述式會變更現行伺服器上的 SQL 表格函數。
呼叫
此陳述式可以內嵌在應用程式中,或以互動方式發出。 它是可動態準備的可執行陳述式。
授權
陳述式的授權 ID 所保留的專用權必須至少包含下列其中一項:
- 針對陳述式中所識別的函數:
- 函數的 ALTER 專用權,以及
- 包含函數之綱目的 USAGE 專用權。
- 資料庫管理者權限
如果指定不同的外部程式,則陳述式的授權 ID 所保留的專用權也必須包括建立新的外部表格函數所需的相同專用權。 如需相關資訊,請參閱 CREATE FUNCTION (SQL 表格)。
- 陳述式的授權 ID 必須具有 安全管理者權限。 請參閱 管理權限。
如需對應於 SQL 專用權之系統權限的相關資訊,請參閱 檢查函數或程序的專用權時對應的系統權限、 檢查表格或視圖的專用權時對應的系統權限、 及 將專用權檢查至特定類型時的對應系統權限。
語法
說明
- FUNCTION 或 SPECIFIC FUNCTION
- 識別要變更的函數。 function-name 必須識別存在於現行伺服器上的 SQL 表格函數。
指定的函數已變更。 會保留函數的擁有者及函數的所有專用權。
- FUNCTION function-name
- 依名稱識別函數。 function-name 必須正好識別一個函數。 此函數可以定義任意數目的參數。 如果指定或隱含綱目中有多個指定名稱的函數,則會傳回錯誤。
- FUNCTION function-name (parameter-type , ...)
- 透過函數簽章來識別函數,其唯一識別函數。 function-name (parameter-type , ...) 必須識別具有指定函數簽章的函數。 指定的參數必須符合建立函數時所指定之對應位置中的資料類型。 資料類型的數目,以及資料類型的邏輯連結用來識別正在變更的特定函數實例。 資料類型的同義字視為相符。 具有預設值的參數必須包含在此簽章中。
如果指定 function-name () ,則識別的函數必須具有零參數。
- 函數名稱
- 識別函數的名稱。
- (參數類型 ...)
- 識別函數的參數。
如果指定不完整的特殊類型名稱,資料庫管理程式會搜尋 SQL 路徑,以解析特殊類型的綱目名稱。
對於具有長度、精準度或小數位數屬性的資料類型,請使用下列其中一項:
- 空括弧指出資料庫管理程式在判斷資料類型是否相符時忽略屬性。 例如, DEC () 將被視為與以 DEC (7, 2) 資料類型定義的函數的參數相符。 不過,無法以空括弧指定 FLOAT ,因為其精準度值指出特定的資料類型 (REAL 或 DOUBLE)。
- 如果指定 length、precision 或 scale 屬性的特定值,該值必須完全符合 CREATE FUNCTION 陳述式中指定的值 (隱含或明確)。 如果資料類型是 FLOAT ,則精準度不必完全符合指定的值,因為比對是根據資料類型 (REAL 或 DOUBLE)。
- 如果未明確指定長度、精準度或小數位數,且未指定空括弧,則會隱含資料類型的預設屬性。 隱含長度必須完全符合 CREATE FUNCTION 陳述式中指定 (隱含或明確) 的值。
指定 FOR DATA 子句或 CCSID 子句是選用的。 省略任一子句表示在判斷資料類型是否相符時,資料庫管理程式會忽略屬性。 如果指定任一子句,則必須符合 CREATE FUNCTION 陳述式中隱含或明確指定的值。
- 傳址不傳值
- 指定函數定義為接收此參數的定位器。 如果指定 AS LOCATOR ,則資料類型必須是 LOB 或 XML ,或基於 LOB 或 XML 的特殊類型。
- SPECIFIC FUNCTION specific-name
- 依函數的特定名稱來識別函數。 specific-name 必須識別現行伺服器上存在的特定功能。
- ALTER option-list
- 指出要變更函數的一或多個選項。 如果指定 ALTER FUNCTION ALTER option-list 且未指定選項,則會使用現有函數定義中的值。 如需每一個選項的說明,請參閱 CREATE FUNCTION (SQL 表格) 。
- REPLACE routine-specification
- 指出現有函數定義 (包括選項及參數) 將取代為此陳述式中指定的那些函數定義。 當取代函數時,會取代所有選項的值。 如果未指定選項,則會使用與建立新的 SQL 表格函數時相同的預設值,如需相關資訊,請參閱 CREATE FUNCTION (SQL 表格)。
如果常式具有註解或標籤,則會從常式定義中移除它們。
- 限制
- 指出如果任何函數、具體化查詢表格、程序、觸發程式或視圖參照該函數,則不會變更或取代該函數。
- (參數-宣告, ...)
- 指定函數的參數數目、每一個參數的資料類型,以及每一個參數的名稱。
SQL 函數中容許的參數數目上限為 2000。
- 參數名稱
- 為參數命名。 名稱用來參照函數主體內的參數。 此名稱不能與參數清單中任何其他 parameter-name 相同。
- data-type3
- 指定輸入參數的資料類型。 如果指定 CCSID ,則在將參數傳遞給函數之前,會將參數轉換成該 CCSID。 如果未指定 CCSID ,則在呼叫函數時,會由現行伺服器上的預設 CCSID 決定 CCSID。
- 預設子句
- 指定參數的預設值。 預設值可以是常數、特別暫存器、廣域變數、表示式、
a search-condition、
或關鍵字 NULL。 表示式是 表示式中定義的任何表示式,不包括聚集函數或直欄名稱。
如果指定 search-condition ,則不得在 EXISTS 或 IN 述詞中包含子查詢。
如果未指定預設值,則參數沒有預設值,且在呼叫時無法省略。 表示式字串的長度上限為 64K。預設表示式必須是與參數資料類型相容的指派。
預設表示式中要作為清單中數值常數的分隔字元的任何逗點必須後接空格。
無法為陣列類型的參數指定預設值。
- RETURNS TABLE
- 指定函數的輸出表格。
假設參數數目為 N。 不得超過 2000-N 個直欄。
- 直欄名稱
- 指定輸出表格的直欄名稱。 請勿多次指定相同的名稱。
- data-type2
- 指定輸出的資料類型和屬性。
您可以指定任何內建資料類型 (LONG VARCHAR 或 LONG VARGRAPHIC 除外) 或特殊類型。
如果指定 CCSID ,且傳回資料的 CCSID 以不同的 CCSID 編碼,則資料會轉換成指定的 CCSID。
如果未指定 CCSID ,則傳回資料會轉換為工作的 CCSID (或圖形字串回覆值之工作的相關圖形 CCSID) ,如果傳回資料的 CCSID 是以不同的 CCSID 編碼。 若要避免在轉換期間可能遺失任何字元,請考慮明確指定 CCSID ,以代表將從函數傳回的任何字元。 如果資料類型是圖形字串資料,這尤其重要。 在此情況下,請考慮使用 CCSID 1200 或 13488 (Unicode 圖形字串資料)。
- 選項-清單
- 要變更之函數的選項清單。 這些選項與上面在 ALTER option-list下列出的選項相同。 如果未指定特定選項,則會使用建立新功能時所使用的相同預設值。 如需相關資訊,請參閱 CREATE FUNCTION (SQL 表格)。
- SET OPTION-陳述式
- 指定將用來建立函數的選項。 例如,若要建立可除錯函數,可以包括下列陳述式:
如需相關資訊,請參閱 SET OPTION。SET OPTION DBGVIEW = *SOURCEALTER FUNCTION 陳述式中不容許選項 CNULRQD、COMPILEOPT、NAMING 及 SQLCA。 處理預設值表示式時使用下列選項 :ALWCPYDTA、CONACC、DATFMT、DATSEP、DECFLTRND、DECMPT、DECFRESULT、DFTRDBCOL、LANGID、SQLCURRULE、SQLPATH、SRTSEQ、TGTRLS、TIMFMT 及 TIMSEP。
- SQL-routine-body
- 指定單一 SQL 陳述式,包括複合陳述式。 如需定義 SQL 函數的相關資訊,請參閱 SQL 控制陳述式 。
函數中不容許呼叫發出 CONNECT、SET CONNECTION、RELEASE、DISCONNECT、COMMIT、ROLLBACK 及 SET TRANSACTION 陳述式的程序。
SQL-routine-body 必須至少包含一個 RETURN 陳述式,且必須在呼叫函數時執行 RETURN 陳述式。
在 SQL-routine-body中不容許具有 REPLACE 關鍵字的 ALTER PROCEDURE (SQL)、ALTER FUNCTION (SQL 純量) 及 ALTER FUNCTION (SQL 表格)。
附註
定義或取代函數的一般考量: 如需定義函數的一般資訊,請參閱 CREATE FUNCTION (SQL 表格)。 ALTER FUNCTION (SQL 表格) 容許在保留函數的專用權時變更個別屬性。
移除 RESTRICT ON DROP 屬性: 如果在執行 ALTER FUNCTION 陳述式時,預設表示式中參照的任何物件都不存在,則變更會失敗。 搭配使用 CREATE FUNCTION 陳述式與 OR REPLACE 子句,以建立不含遺漏物件參照的函數。 WITHOUT RESTRICT ON DROP 子句可以併入此 CREATE FUNCTION 陳述式或後續的 ALTER FUNCTION 陳述式。
重疊顯示效果: 如果指定 REPLACE 時未指定 RESTRICT ,且函數簽章或結果資料類型已變更,則任何函數、具體化查詢表格、程序、觸發程式或參照該函數之視圖的結果可能無法預期。 應重建任何參照物件。
模糊化陳述式: 可以變更使用模糊化陳述式所建立的函數。 變更陳述式時,會修改儲存在型錄中的陳述式的編碼版本,且可能會超出 SQL 陳述式的長度上限。 如果發生此情況,則會發出錯誤,且變更會失敗。
將函數從 NOT SECURED 變更為 SECURED: 執行 ALTER FUNCTION 陳述式之後,會將函數視為安全。 Db2® 會將 SECURED 屬性視為主張,宣告使用者已針對使用者定義函數的所有變更建立審核程序。 Db2 假設正在透過此審核處理程序檢閱所有後續的 ALTER FUNCTION 陳述式。
在安全函數中呼叫其他使用者定義函數: 在參照使用橫列存取控制或直欄存取控制之表格的 SQL 資料變更陳述式中參照安全使用者定義函數時,如果安全使用者定義函數呼叫其他使用者定義函數,則不會將巢狀使用者定義函數驗證為安全。 如果那些巢狀函數可以存取機密資料,則獲授權存取 IBM® i 之「資料庫安全管理者」功能的使用者需要確保容許那些函數存取該資料,並且應該確保已針對那些函數的所有變更建立變更控制審核程序。
替代語法: 下列關鍵字是支援與舊版相容的同義字。 這些關鍵字非標準且不應使用:
- 關鍵字 VARIANT 和 NOT VARIANT 可以作為 NOT DETERMINISTIC 和 DETERMINISTIC 的同義字。
- 關鍵字 NULL CALL 和 NOT NULL CALL 可以作為 CALLED ON NULL INPUT 和 RETURNS NULL ON NULL ON NULL INPUT 的同義字。
- 關鍵字 IS DETERMINISTIC 可用作 DETERMINISTIC 的同義字。
範例
修改 SQL 表格函數的定義,以將預估基數設為 10,000。
ALTER FUNCTION GET_TABLE
ALTER CARDINALITY 10000