ALTER FUNCTION (SQL スカラー)

ALTER FUNCTION (SQL スカラー) ステートメントは、現行サーバーの SQL スカラー関数を変更します。

呼び出し

このステートメントは、アプリケーション・プログラムに組み込むことができ、また対話式に呼び出すこともできます。 これは、動的に準備できる実行可能ステートメントです。

権限

このステートメントの権限 ID が保持する特権には、少なくとも以下の 1 つ が含まれていなければなりません。

  • ステートメント内で識別される関数に対しては次のもの。
    • その関数に対する ALTER 特権、および
    • 関数が含まれるスキーマに対する USAGE 特権
  • データベース管理者権限

別の外部プログラムが指定されている場合、ステートメントの権限 ID によって保持される特権には、新規の外部スカラー関数を作成するために必要な同一特権が含まれていなければなりません。詳しくは、CREATE FUNCTION (SQL スカラー)を参照してください。

SECURED オプションが指定されるか、または関数が現在セキュアである場合は、以下のとおりです。
  • このステートメントの許可 ID には、セキュリティー管理者権限 がなければなりません。 管理権限を参照してください。

SQL 特権に対応するシステム権限の説明については、『関数またはプロシージャーへの権限を検査する際の対応するシステム権限』、『表またはビューへの権限を検査する際の対応するシステム権限』、および『特殊タイプへの権限を検査する際の対応するシステム権限』を参照してください。

構文

構文図を読む構文図をスキップする
>>-ALTER-------------------------------------------------------->

>--+-FUNCTION--function-name--+------------------------------+-+-->
   |                          '-(--+--------------------+--)-' |   
   |                               | .-,--------------. |      |   
   |                               | V                | |      |   
   |                               '---parameter-type-+-'      |   
   '-SPECIFIC FUNCTION--specific-name--------------------------'   

     .-ALTER-.                                        
>--+-+-------+--+----------+--option-list---------+------------><
   |            '-RESTRICT-'                      |   
   '-REPLACE--+----------+--routine-specification-'   
              '-RESTRICT-'                            

parameter-type

|----data-type1--+------------+---------------------------------|
                 '-AS LOCATOR-'     

data-type1, data-type2,data-type3

|--+-built-in-type------+---------------------------------------|
   '-distinct-type-name-'   

routine-specification

|----(--+---------------------------+--)------------------------>
        | .-,---------------------. |        
        | V                       | |        
        '---parameter-declaration-+-'        

>----RETURNS--data-type2----+-------------+--------------------->
                            '-option-list-'   

>--+----------------------+--SQL-routine-body-------------------|
   '-SET OPTION-statement-'                     

parameter-declaration

|--parameter-name--data-type3--+----------------+---------------|
                               '-default-clause-'   

構文図を読む構文図をスキップする
SQL-routine-body

|----SQL-control-statement--------------------------------------|

構文図を読む構文図をスキップする
option-list

                    (1)                          
|--+--------------+------+-------------------+------------------>
   '-LANGUAGE SQL-'      +-NOT DETERMINISTIC-+   
                         '-DETERMINISTIC-----'   

>--+-------------------+--+----------------------------+-------->
   +-READS SQL DATA----+  +-CALLED ON NULL INPUT-------+   
   +-MODIFIES SQL DATA-+  '-RETURNS NULL ON NULL INPUT-'   
   '-CONTAINS SQL------'                                   

>--+---------------------------+--+-----------------+----------->
   '-INHERIT SPECIAL REGISTERS-'  '-STATIC DISPATCH-'   

>--+--------------------+--+---------------------+-------------->
   +-EXTERNAL ACTION----+  +-ALLOW DEBUG MODE----+   
   '-NO EXTERNAL ACTION-'  +-DISABLE DEBUG MODE--+   
                           '-DISALLOW DEBUG MODE-'   

>--+------------+--+-------------------+------------------------>
   +-FENCED-----+  +-ALLOW PARALLEL----+   
   '-NOT FENCED-'  '-DISALLOW PARALLEL-'   

>--+---------------------------------------------------------------+-->
   |                               .-DEFAULT---------------------. |   
   '-CONCURRENT ACCESS RESOLUTION--+-+-USE CURRENTLY COMMITTED-+-+-'   
                                   | '-U-----------------------' |     
                                   '-+-WAIT FOR OUTCOME-+--------'     
                                     '-W----------------'              

>--+-------------+----------------------------------------------|
   +-NOT SECURED-+   
   '-SECURED-----'   

注:
  1. option-list 内の文節は、どのような順番で指定してもかまいません。
構文図を読む構文図をスキップする
built-in-type

|--+-+---SMALLINT---+--------------------------------------------------------------------------+--|
   | +-+-INTEGER-+--+                                                                          |   
   | | '-INT-----'  |                                                                          |   
   | '---BIGINT-----'                                                                          |   
   |                  .-(5,0)------------------------.                                         |   
   +-+-+-DECIMAL-+-+--+------------------------------+-----------------------------------------+   
   | | '-DEC-----' |  |             .-,0--------.    |                                         |   
   | '-+-NUMERIC-+-'  '-(--integer--+-----------+--)-'                                         |   
   |   '-NUM-----'                  '-, integer-'                                              |   
   |          .-(--53--)------.                                                                |   
   +-+-FLOAT--+---------------+-+--------------------------------------------------------------+   
   | |        '-(--integer--)-' |                                                              |   
   | +-REAL---------------------+                                                              |   
   | |         .-PRECISION-.    |                                                              |   
   | '-DOUBLE--+-----------+----'                                                              |   
   |             .-(--34--)-.                                                                  |   
   +---DECFLOAT--+----------+------------------------------------------------------------------+   
   |             '-(--16--)-'                                                                  |   
   |                    .-(--1--)-------.                                                      |   
   +-+-+-+-CHARACTER-+--+---------------+----------+--+----------------+---------------------+-+   
   | | | '-CHAR------'  '-(--integer--)-'          |  +-FOR BIT DATA---+                     | |   
   | | '-+-+-CHARACTER-+--VARYING-+--(--integer--)-'  +-FOR SBCS DATA--+                     | |   
   | |   | '-CHAR------'          |                   +-FOR MIXED DATA-+                     | |   
   | |   '-VARCHAR----------------'                   '-ccsid-clause---'                     | |   
   | |                                          .-(--1M--)-------------.                     | |   
   | '-----+-+-CHARACTER-+--LARGE OBJECT-+------+----------------------+--+----------------+-' |   
   |       | '-CHAR------'               |      '-(--integer--+---+--)-'  +-FOR SBCS DATA--+   |   
   |       '-CLOB------------------------'                    +-K-+       +-FOR MIXED DATA-+   |   
   |                                                          +-M-+       '-ccsid-clause---'   |   
   |                                                          '-G-'                            |   
   |                .-(--1--)-------.                                                          |   
   +-+---GRAPHIC----+---------------+-------+--+--------------+--------------------------------+   
   | |              '-(--integer--)-'       |  '-ccsid-clause-'                                |   
   | +-+-GRAPHIC VARYING-+--(--integer--)---+                                                  |   
   | | '-VARGRAPHIC------'                  |                                                  |   
   | |             .-(--1M--)-------------. |                                                  |   
   | '---DBCLOB----+----------------------+-'                                                  |   
   |               '-(--integer--+---+--)-'                                                    |   
   |                             +-K-+                                                         |   
   |                             +-M-+                                                         |   
   |                             '-G-'                                                         |   
   |                             .-(--1--)-------.                                             |   
   +-+-+-+-NATIONAL CHARACTER-+--+---------------+----------+---------------------+------------+   
   | | | +-NATIONAL CHAR------+  '-(--integer--)-'          |                     |            |   
   | | | '-NCHAR--------------'                             |                     |            |   
   | | '-+-+-NATIONAL CHARACTER-+--VARYING-+--(--integer--)-'                     |            |   
   | |   | +-NATIONAL CHAR------+          |                                      |            |   
   | |   | '-NCHAR--------------'          |                                      |            |   
   | |   '-NVARCHAR------------------------'                                      |            |   
   | |                                                   .-(--1M--)-------------. |            |   
   | '-----+-+-NATIONAL CHARACTER-+--LARGE OBJECT-+------+----------------------+-'            |   
   |       | '-NCHAR--------------'               |      '-(--integer--+---+--)-'              |   
   |       '-NCLOB--------------------------------'                    +-K-+                   |   
   |                                                                   +-M-+                   |   
   |                                                                   '-G-'                   |   
   |             .-(--1--)-------.                                                             |   
   +-+-+-BINARY--+---------------+---------+-----------------+---------------------------------+   
   | | |         '-(--integer--)-'         |                 |                                 |   
   | | '-+-BINARY VARYING-+--(--integer--)-'                 |                                 |   
   | |   '-VARBINARY------'                                  |                                 |   
   | |                              .-(--1M--)-------------. |                                 |   
   | '---+-BLOB----------------+----+----------------------+-'                                 |   
   |     '-BINARY LARGE OBJECT-'    '-(--integer--+---+--)-'                                   |   
   |                                              +-K-+                                        |   
   |                                              +-M-+                                        |   
   |                                              '-G-'                                        |   
   +-+-DATE-------------------------+----------------------------------------------------------+   
   | |       .-(--0--)-.            |                                                          |   
   | +-TIME--+---------+------------+                                                          |   
   | |            .-(--6--)-------. |                                                          |   
   | '-TIMESTAMP--+---------------+-'                                                          |   
   |              '-(--integer--)-'                                                            |   
   |             .-(--200--)-----.                                                             |   
   +---DATALINK--+---------------+--+--------------+-------------------------------------------+   
   |             '-(--integer--)-'  '-ccsid-clause-'                                           |   
   +---ROWID-----------------------------------------------------------------------------------+   
   '---XML-------------------------------------------------------------------------------------'   

ccsid-clause

|--CCSID--integer-----------------------------------------------|

default-clause

|--DEFAULT--+-NULL-------------+--------------------------------|
            +-constant---------+   
            +-special-register-+   
            +-global-variable--+   
            '-(--expression--)-'   

説明

FUNCTION または SPECIFIC FUNCTION
変更する関数を識別します。 この関数名 は、現行サーバーに存在している SQL スカラー関数を識別していなければなりません。

指定した関数が変更されます。 関数の所有者と関数に関するすべての特権は、保持されます。

FUNCTION function-name
関数を名前によって識別します。 function-name は厳密に 1 つの関数を示す必要があります。この関数には、パラメーター をいくつでも定義することができます。指定されたスキーマまたは暗黙のスキーマの中に、指定された名前 の関数が複数ある場合、エラーが戻されます。
FUNCTION function-name (parameter-type,...)
関数を一意的に識別する関数シグニチャーによって、関数を識別します。 function-name (parameter-type,...) は、指定された関数シグニチャーを持つ関数を識別しなければなりません。 指定されたパラメーターは、関数の作成時に指定された、 対応する位置にあるデータ・タイプと一致していなければなりません。 変更される特定の関数インスタンスを識別する場合、データ・タイプの数とデータ・タイプの論理連結が使用されます。データ・タイプの同義語は、一致として扱われます。 デフォルトがあるパラメーターは、このシグニチャーに含まれていなければなりません。

function-name() を指定する場合、識別される関数にパラメーターを使用することはできません。

function-name
関数の名前を識別します。
(parameter-type,...)
関数のパラメーターを識別します。

非修飾の特殊タイプ名を指定する場合、データベース・マネージャーはその特殊タイプのスキーマ名を解決するための SQL パスを検索します。

長さ属性、精度属性、あるいは位取り属性があるデータ・タイプの場合、以下のいずれかを使用します。

  • 中が空の括弧は、データ・タイプが一致しているか否かの判別時にデータベース・マネージャーによって属性が無視されることを示します。 例えば、DEC() は、DEC(7,2) のデータ・タイプで定義された関数のパラメーターに一致するものとみなされます。 ただし、精度値は特定のデータ・タイプ (REAL または DOUBLE) を示すため、 中が空の括弧で FLOAT を指定することはできません。
  • 長さ属性、精度属性、あるいは位取り属性に特定の値を指定した場合、 その値は、CREATE FUNCTION ステートメントの中で暗黙的または明示的に指定された値と正確に一致している必要があります。 データ・タイプが FLOAT の場合、 突き合わせはデータ・タイプ (REAL または DOUBLE) に基づいて行われるので、 精度は指定された値に厳密に一致している必要はありません。
  • 長さ属性、精度属性、または位取り属性が明示的に指定されておらず、空の括弧も指定されていない場合、該当のデータ・タイプのデフォルト属性が暗黙指定されます。暗黙の長さは、CREATE FUNCTION ステートメントの中で暗黙的または明示的に指定さ れた値と正確に一致している必要があります。

FOR DATA 文節または CCSID 文節の指定はオプショナルです。 いずれの文節も指定しないと、データ・タイプが一致するかどうかを判定する場合に、データベース・マネージャーが属性を無視することを示します。 どちらか一方の文節を指定する場合は、CREATE FUNCTION ステートメントに 暗黙的または明示的に指定されている値と一致させる必要があります。

AS LOCATOR
関数が、このパラメーターのロケーターを受け取るように定義されることを示します。 AS LOCATOR を指定する場合は、データ・タイプは LOB または XML、あるいは LOB または XML に基づく特殊タイプでなければなりません。
SPECIFIC FUNCTION specific-name
関数を特定名によって識別します。 specific-name は、現行サーバーに存在する特定の関数を示している必要があります。
ALTER option-list
関数の 1 つ以上のオプションが変更されることを示します。 ALTER FUNCTION ALTER option-list が指定されてオプションが指定されない場合は、既存の関数定義での値が使用されます。 各オプションの説明については、CREATE FUNCTION (SQL スカラー)を参照してください。
REPLACE routine-specification
オプションおよびパラメーターを含む既存の関数定義を、このステートメントで指定したものに置き換えることを示します。 関数を置き換えると、すべてのオプションの値が置き換えられます。 オプションを指定しない場合は、新規 SQL スカラー関数が作成されるときと同じデフォルトが使用されます。詳しくは、CREATE FUNCTION (SQL スカラー)を参照してください。

ルーチンにコメントやラベルがある場合は、ルーチン定義からコメントやラベルが削除されます。

RESTRICT
任意の関数、マテリアライズ照会表、プロシージャー、トリガー、またはビューによって参照された場合は、関数が変更または置換されないことを示します。
(parameter-declaration,…)
関数のパラメーターの数、および各パラメーターのデータ・タイプと名前を指定します。

SQL 関数に許可されるパラメーターの最大数は 2000 です。

parameter-name
パラメーター名を指定します。この名前は、関数の本体に含まれるパラメーターを参照するのに使用されます。 この名前は、パラメーター・リスト内の他のパラメーター名 と同じものであってはなりません。
data-type3
入力パラメーターのデータ・タイプを指定します。CCSID が指定されている場合、関数に渡される前に、パラメーターはその CCSID に変換されます。CCSID が指定されていない場合は、CCSID は、関数 の呼び出し時点における現行サーバーのデフォルトの CCSID によって決まり ます。
default-clause
パラメーターのデフォルト値を指定します。デフォルト値は、定数、特殊レジスター、グローバル変数、式、またはキーワード NULL にすることができます。式は、集約関数および列名を含まない、で 定義されている任意の式です。デフォルト値が指定されていない場合、パラメーターにデフォルト値がないため、呼び出し時に省略できません。式ストリングの 最大長は 64K です。

デフォルトの式は、 パラメーターのデータ・タイプに対して割り当ての互換性がなければなりません 。

デフォルト式内でリスト中の数値定数を区切る区切り記号として 使用するコンマの後には、スペースが 1 つ必要です。

配列タイプの パラメーターにデフォルトを指定することはできません。

RETURNS
関数の出力を指定します。
data-type2
出力のデータ・タイプと属性を指定します。

あらゆる組み込みデータ・タイプ (ただし、LONG VARCHAR または LONG VARGRAPHIC は除く) や特殊タイプを指定することができます。

CCSID が指定され、戻りデータの CCSID が異なる CCSID でコード化されて いる場合、データは指定された CCSID に変換されます。

CCSID が指定されていない場合、戻りデータの CCSID が異なる CCSID でコ ード化されている場合には、戻りデータはジョブの CCSID (グラフィック・ ストリング戻り値の場合は、ジョブに関連したグラフィック CCSID) に変換 されます。 変換時に文字が失われるのを防ぐために、関数から戻される文字 をすべて表現できる CCSID を明示的に指定することを考慮してください。 これは、データ・タイプがグラフィック・ストリング・データの場合に特に重要です。 この場合、CCSID 1200 または 13488 (ユニコード・グラフィック・ストリング・データ) を使用することを考慮してください。

option-list
変更される関数のオプションのリスト。これらのオプションは、前記の ALTER option-list に記載したものと同じです。 具体的なオプションを指定しない場合は、新規関数が作成されるときと同じデフォルトが使用されます。 詳しくは、CREATE FUNCTION (SQL スカラー)を参照してください。
SET OPTION-statement
関数を作成するときに使用するオプションを指定します。 例えば、デバッグ可能な関数を作成するときは、次のステートメントを含め ることができます。
SET OPTION DBGVIEW = *SOURCE 
詳しくは、SET OPTIONを参照してください。

オプション CNULRQD、COMPILEOPT、NAMING、および SQLCA は、ALTER FUNCTION ステートメントでは 使用できません。デフォルト値式を処理するときには、オプション ALWCPYDTA、 CONACC、DATFMT、DATSEP、DECFLTRND、DECMPT、DECRESULT、
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 ステートメントが少なくとも 1 つは含まれていなければならず、関数の呼び出し時に RETURN ステートメントが 1 つ実行される必要があります。

REPLACE キーワードを指定する ALTER PROCEDURE (SQL)、ALTER FUNCTION (SQL スカラー)、および ALTER FUNCTION (SQL 表) は、SQL-routine-body では使用できません。

関数の定義または置換に関する一般考慮事項: 関数の定義に関する一般情報については、CREATE FUNCTION (SQL スカラー) を参照してください。 ALTER FUNCTION (SQL スカラー) を使用すると、関数の特権を保持したままで、個々の属性を変更できます。

カスケード効果: 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 INPUT の 同義語として使用できます。
  • DETERMINISTIC の同義語として、キーワード IS DETERMINISTIC を使用できます。

SQL スカラー関数の定義を変更し、関数が deterministic 関数であることを指示します。

  ALTER FUNCTION MY_UDF1 
    DETERMINISTIC