データベース・レコードの削除

削除操作を用いると、既存のデータベース・レコードを削除することができます。

RPG 言語の DELET ステートメントおよび COBOL 言語の DELETE ステートメントがこのタイプの操作例です。 データベース・レコードを削除するには、まずレコードを読み取ってロックしなければなりません。 到着順アクセス・パスを使用したデータベース・レコードの読み取り、またはキー順アクセス・パスを使用したデータベース・レコードの読み取りにリストされている読み取り操作のいずれかで更新オプションを指定すると、レコードはロックされます。削除のためのレコードのロック規則 および削除するレコードの指定の規則は、更新操作の場合と同じです。
注: 高水準言語によっては、 最初にレコードを読み取る必要のないものがあります。 こうした言語では、 削除したいレコードを単に削除ステートメントに指定するだけです。たとえば、RPG 言語では、レコードを最初に読み取らずに削除できます。

データベース・レコードを削除すると、物理レコードには削除済みのマークが付けられます。これは、削除操作が論理ファイルを通して行われた場合にも当てはまります。削除されたレコードを読み取ることはできません。レコードは、それが入っているすべてのキー順アクセス・パスから除去されます。削除済みレコードの相対レコード番号は同じままです。物理ファイル・メンバー中の他のすべての相対レコード番号も変更できません。

削除されたレコードが使用していたスペースはファイルの中に残りますが、下記の時点まで再使用されません。
  • 物理ファイル・メンバーの再編成 (RGZPFM) コマンドを実行して、ファイル・メンバー中のこれらのスペースを圧縮して開放する時点。
  • プログラムが、削除されたレコードの相対レコード番号と同じ相対レコード 番号を使用して、ファイルにレコードを書き込む時点。
注: ファイルに削除済みレコード・スペースの再使用属性が指定されている場合、システムは自動的に削除済みレコード・スペースを再使用しようとします。

システムは、削除済みレコードのデータの検索を認めません。しかし、削除済みレコードに関連付けられた位置 (相対レコード番号) に新しいレコードを 書き込むことは可能です。書き込み操作によって、新しいレコードが削除済みレコードに置き換わります。ファイル中の特定の位置 (相対レコード番号) にレコードを 書き込む方法の詳細については、ご使用の高水準言語の該当のトピックを参照してください。

削除済みレコードの相対レコード番号にレコードを書き込むためには、その相対レコード番号が物理ファイル・メンバーの中に存在していなければなりません。ファイル中のレコードは、高水準言語で削除操作を使用して削除できます。物理ファイル・メンバーの初期設定 (INZPFM) コマンドを使用 して、ファイルからレコードを削除できます。INZPFM コマンドを使用すれば、レコードを削除するために 物理ファイル・メンバー全体を初期設定できます。

削除するレコードが入っているファイルで削除トリガーがそれに関連付けられている場合、 レコードの削除の前または後にトリガー・プログラムが呼び出されます。レコードを削除して、削除トリガーを実行しないようにする場合は、TRUNCATE SQL ステートメントを IGNORE DELETE TRIGGERS 節と共に使用します。

ファイルが参照制約関係の一部である場合は、レコード削除に影響が出ることがあります。