関数の作成と置換は、キーワードのCREATEとREPLACEを除いて、同じ構文で実行できます。
CREATEを指定する場合、その関数は存在していない必要があります。
REPLACEを指定する場合は、新規の関数の作成または既存の関数の置換ができます。 ただし、置換する関数が最初に特定関数名で作成されている場合は、その特定関数名をREPLACE FUNCTION文に使用する必要があります。
既存の関数を置換する場合、置換する関数でEXECUTE NOT PROTECTED属性がALTER FUNCTION文を使用して設定されていても、その属性は保持されません。ALTER FUNCTION (外部形式)を参照してください。
REPLACEを使用することの利点は、関数に対するEXECUTE権限を、その権限をすでに持つすべてのユーザーに再び付与する必要がないことです。
UDT関連の機能を実行するUDFの置換に関する重要な制限事項については、次のトピックを参照してください。
順序付けの置換またはUDFの変換
UDTの順序付け機能またはデータ変換機能のいずれかの実装に使用されるUDFは、次の条件が満たされる場合にのみ置換できます。
- REPLACE FUNCTIONの指定は、ディクショナリ内の既存のメソッドの指定と完全に一致していなければならない。
関数名、パラメータ リスト、EXTERNAL句の中のメソッド エントリ ポイント名などがすべて一致しなければなりません。
- 置換されるUDFの実行モードはEXECUTE PROTECTEDに設定しなければならない。
このUDFが現在EXECUTE NOT PROTECTEDモードで実行するように設定されている場合、REPLACE FUNCTION文を実行する前に、ALTER FUNCTION文を実行してモードをEXECUTE PROTECTEDに切り替える必要があります。ALTER FUNCTION (外部形式)を参照してください。
UDTに対するUDFのキャスティングの置換
UDTのキャスティング機能の実装に使用されているUDFは、次の手順で置換することしかできません。
- DROP CAST
- REPLACE FUNCTION
- CREATE CAST
REPLACE FUNCTIONを使ってキャスティング関数を直接置き換えようとすると、エラーが発生します。