WRAP

WRAP 関数は、判読可能な DDL ステートメントを、難読化された DDL ステートメントに変換します。

構文図を読む構文図をスキップする
>>-WRAP--(--object-definition-string--)------------------------><

難読化された DDL ステートメント内の手順ロジックおよび 組み込み SQL ステートメントは、ロジックに含まれる知的財産を簡単には抽出できないように、暗号化されます。

スキーマは SYSIBMADM です。

object-definition-string
DDL ステートメントを含んでいる、タイプ CLOB または DBCLOB のストリング。以下のいずれかの SQL ステートメントを指定できます。
  • CREATE FUNCTION (SQL スカラー)
  • CREATE FUNCTION (SQL 表)
  • CREATE PROCEDURE (SQL)
  • CREATE TRIGGER
結果は、エンコードされたバージョンの入力ステートメントを 含んでいる、タイプ CLOB(2M) のストリングです。結果が NULL になることはありません。エンコードは、元のステートメントのままにしたルーチン・シグニチャーまたはトリガー名までの接頭部と、 その後に続くキーワード WRAPPED から構成されます。このキーワードの後には、関数を起動したアプリケーション・サーバーについての 情報が続きます。この情報の形式は pppvvrrm で、各部の意味は次のとおりです。
  • ppp は、以下の 3 文字を使用して製品を示します。
    • DSN (Db2 for z/OS の場合)
    • QSQ (Db2® for i の場合)
    • SQL (Db2 for LUW の場合)
  • vv は、2 桁のバージョン ID です (例えば、'07' など)。
  • rr は、2 桁のリリース ID です (例えば、'02' など)。
  • m は、1 文字の修正レベル ID です (例えば、'0' など)。
例えば、Db2 for i バージョン 7.3 は、「QSQ07030」で示されます。

このアプリケーション・サーバー情報の 後に、文字 (a から z および A から Z)、数字 (0 から 9)、下線、およびコロンからなるストリングが続きます。

エンコードされた DDL ステートメント は、平文形式のステートメントよりも最大 3 分の 1 だけ長くなる可能性があります。 結果が SQL ステートメントの最大長を超える場合、 エラーが発行されます。

注記

ステートメントのエンコードは、内容を難読化することを意図したものであり、強い暗号化の一種と考えるべきではありません。

例 1: 週 40 時間労働として時間給から年間給与を計算する関数の難読化版を 生成します。

VALUES WRAP('CREATE FUNCTION salary(wage DECFLOAT) RETURNS DECFLOAT 
                       RETURN wage * 40 * 52')    

このステートメントの結果は、例えば次のようになります。

CREATE FUNCTION salary(wage DECFLOAT) WRAPPED QSQ07020 <encoded-suffix>

例 2: 複雑なデフォルトを設定するトリガーの難読化版を 生成します。

VALUES WRAP('CREATE OR REPLACE TRIGGER trig1 BEFORE INSERT ON emp 
                       REFERENCING NEW AS n FOR EACH ROW 
                       WHEN (n.bonus IS NULL) SET n.bonus = n.salary * .04')    

このステートメントの結果は、例えば次のようになります。

CREATE TRIGGER trig1 WRAPPED QSQ07020 <encoded-suffix>