ドロップ時に制限

表、関数、またはプロシージャーの意図しないドロップを防ぐために、RESTRICT ON DROP 属性をオブジェクトの定義に追加することができます。

テーブル、物理ファイル、またはソース物理ファイル

RESTRICT ON DROP は、テーブル、物理ファイル、またはソース物理ファイルに追加することができます。 これは、ライブラリー・レベルの操作を含め、テーブル、物理ファイル、またはソース物理ファイルを削除するすべての方法に適用されます。 表を再定義するために OR REPLACE オプションを使用することが妨げられることはありません。 これはファイル・レベル属性であるため、行を削除する要求やメンバーの削除要求には適用されません。

表を作成する場合は、次のように設定できます:
CREATE TABLE TEST_TABLE (ID INT, NAME VARCHAR(50), ADDRESS VARCHAR(50)) WITH RESTRICT ON DROP; 
ALTER TABLE ステートメントを使用して、既存の表、データベース物理ファイル、またはソース物理ファイルに追加することができます。
ALTER TABLE TEST_TABLE ADD RESTRICT ON DROP; 

属性が表に追加されると、そのユーザーの権限に関係なく、表をドロップしたり削除したりすることはできません。 RESTRICT ON DROP によってデータベース・ファイルが削除されないようにすると、SQL ステートメントによって SQLCODE -672 (SQLSTATE 55035) が戻されるか、 CPF32BF エスケープ・メッセージが CL コマンドに戻されます。

表またはファイルをドロップするには、その前に、 ALTER TABLE ステートメントを使用して属性を除去する必要があります。
ALTER TABLE TEST_TABLE DROP RESTRICT ON DROP; 

RESTRICT ON DROP は、 QTEMP内の表には追加できません。

CRTDUPOBJ CL コマンドは、RESTRICT ON DROP 属性を新しいファイルに伝搬します。 その他の方法で作成されたデータベース・ファイルは、 CREATE TABLE ステートメントで明示的に指定されていない限り、 RESTRICT ON DROP 属性を持つことはありません。

MOVOBJ、RNMOBJ、および RSTOBJ CL コマンドは、RESTRICT ON DROP 属性を維持します。

関数およびプロシージャー

RESTRICT ON DROP 属性は、SQL ルーチンと外部ルーチンの両方に追加できます。

SQL ルーチン

SQL ルーチンの場合、RESTRICT ON DROP は、ルーチンのドロップおよび関連するプログラムまたはサービス・プログラム・オブジェクトの削除を防止します。
CREATE FUNCTION SQUARE (P1 INT)
     RETURNS INT
     WITH RESTRICT ON DROP
   RETURN P1 * P1; 
ALTER ステートメントを使用して、既存の SQL ルーチンに追加することができます。
ALTER PROCEDURE MYLIB.PROC1 
     WITH RESTRICT ON DROP; 

属性が SQL ルーチンに関連付けられると、ユーザーの権限に関係なく、ルーチンをドロップすることも、関連するプログラムまたはサービス・プログラムを削除することもできません。

プロシージャーまたは関数をドロップする前に、ALTER FUNCTION または ALTER PROCEDURE ステートメントを使用して属性を除去する必要があります。
ALTER PROCEDURE MYLIB.PROC1 
     WITHOUT RESTRICT ON DROP; 

RESTRICT ON DROP によって SQL ルーチンがドロップまたは削除されないようにすると、SQL ステートメントによって SQLCODE -672 (SQLSTATE 55035) が戻されるか、 CPF32BF エスケープ・メッセージが CL コマンドに戻されます。

MOVOBJ、RNMOBJ、および RSTOBJ CL コマンドは、RESTRICT ON DROP 属性を維持します。 CRTDUPOBJ CL コマンドは, RESTRICT ON DROP 属性を新しいプログラムまたはサービス・プログラムに伝搬します。

外部ルーチン

外部ルーチンの場合、RESTRICT ON DROP 属性をルーチン定義に適用することも、プログラムまたはサービス・プログラム・オブジェクトを組み込むこともできます。

プロシージャーがドロップされないようにするには、以下のステートメントを使用します。
CREATE PROCEDURE MYLIB.PROC2 (P1 INT)
     EXTERNAL NAME APPLIB.PGM1
     WITH RESTRICT ON DROP; 
既存の関数に属性を追加し、関数とその関数が使用するサービス・プログラムの両方がドロップまたは削除されないようにするには、次の ALTER FUNCTION ステートメントを使用します。
ALTER FUNCTION MYLIB.FUNC3 
     WITH RESTRICT ON DROP INCLUDING EXTERNAL PROGRAM; 
プロシージャーまたは関数を除去する前に, 属性を除去しなければなりません。 プロシージャーから除去するには、ALTER PROCEDURE ステートメントを使用します。
ALTER PROCEDURE MYLIB.PROC2 
     WITHOUT RESTRICT ON DROP; 

INCLUDING EXTERNAL PROGRAM 文節を使用すると、ルーチンの定義がプログラムまたはサービス・プログラム・オブジェクトに正常に記録された場合にのみ適用されます。 外部ルーチンが作成または変更され、*PGM または *SRVPGM を変更できなかった場合は、メッセージ SQL7909 が出されます。 RESTRICT ON DROP は、ルーチンのドロップを防止しますが、INCLUDING EXTERNAL PROGRAM は実施されません。

RESTRICT ON DROP によって外部ルーチンがドロップされないようにすると、SQL ステートメントによって SQLCODE -672 (SQLSTATE 55035) が戻されます。 RESTRICT ON DROP によって外部ルーチンのプログラムが削除されないようにすると、 CPF32BF エスケープ・メッセージが CL コマンドに戻されます。 同じプログラムまたはサービス・プログラムに対して複数のルーチンが登録されている場合は、オブジェクトをドロップする前に、すべてのルーチンから INCLUDING EXTERNAL PROGRAM 文節を除去する必要があります。

MOVOBJ、RNMOBJ、および RSTOBJ CL コマンドは、RESTRICT ON DROP 属性を維持します。 CRTDUPOBJ CL コマンドは, RESTRICT ON DROP 属性を新しいプログラムまたはサービス・プログラムに伝搬します。