1.1.16 BLOB
BLOBは最大長が定義されていない可変長のバイナリー・フィールドです。
BLOBを使用する操作で最も一般的なものは、データベースへのファイルの保存やファイルの取得です。これでファイルの表示/編集などができるようになります。RDMLやRDMLXでは、BLOBフィールドはファイル名として処理されます。
次はJPGファイルをBLOBに保存する例です。
#MYBLOB := 'C:\temp\mypicture.jpg'
UPDATE FIELDS(#MYBLOB) IN_FILE(FILE1)
一般的な事柄については、「フィールド・タイプについて」を参照してください。
フィールド定義の規則
BLOBをリポジトリに定義するときの規則は以下のとおりです。
長さ |
長さ指定は不可です。小数はありません。 |
有効なキーボード・シフト |
ブランク |
許容される属性 |
AB、ASQN、CS、FE、LC、ND、RA、RL、RLTB 注:LCとASQNは必ず定義する必要があります。削除はできません。 |
編集オプション |
不可 |
デフォルト |
*SQLNULL。デフォルトでASQNが有効になります。 |
フィールド定義の注意事項
・BLOB の作業フィールド・タイプはありません。
使用規則
区画タイプ |
|
ファイル |
BLOBはRDMLXファイルでのみ使用することができます。BLOBフィールドは実フィールドとして使用することができます。BLOBはキー・フィールドとして使用してはいけません。 |
論理ビュー |
BLOBはキー・フィールドとして使用できません。 |
仮想フィールド |
適用不可 |
事前結合フィールド |
適用不可 |
RDMLコマンド |
BLOBまたはCLOBフィールドを使用する場合、そのフィールドにはファイル名が含まれています。オブジェクトの実データではないので注意してください。RDMLやRDMLXでは、LANSA LOBフィールドはファイル名として処理されます。指名ファイルの読み書きによりBLOBまたはCLOBの実データそのものを処理するのは、データベース I/Oコマンドだけです。 |
組み込み関数 |
BLOBを組み込み関数で使用する場合、BLOBは独自のタイプに分類されるので数値または英数字の引数には無効です。 |
特殊値 |
*SQLNULL、*NAVAIL、*REMEMBERED_VALUE、*EMPTY |
変換 |
BLOBはファイル・ポインターとして扱われます。数値や日付/時間フィールド・タイプへの変換はサポートされていません。「フィールド・タイプ変換」を参照してください。 |
使用に関する注意事項
・BLOB をキーの一部(例:アクセス経路へのキーなど)とすることはできません。
・BLOB データの表示または印刷はできません。
・BLOB フィールドをリストに追加する場合、そのフィールドにはファイル名が含まれています。オブジェクトの実データではないので注意してください。
・条件に従ってSQLのWHERE句を生成する場合、このフィールド・タイプは*NULLまたは*SQLNULLとしか比較することはできません。他との比較はすべて拒否されます。
・BLOB タイプのフィールドのデフォルト・プロパティは、.Valueではなく、.FileNameです。これは、このフィールドの「値」を変更することは、実際にそのデフォルト・プロパティつまりファイル名プロパティが変更されるということを明確に示しています。
・BLOB フィールドは特定の制限に従います。
・このフィールドをSELECT_SQLコマンド内で使用することはできません。
・このフィールドを条件で使用することはできません。ただし、*NULLまたは*SQLNULLとの比較は除きます。
・一部またはすべてのDBMSへの変更が記録されない場合があります。したがって、ロールバックの効果がない場合もあります。
・LC 属性は常に有効です。無効にはできません。これは最初にファイル名に影響します。BLOBはバイナリー・タイプとして、あらゆるタイプのデータの使用を許します。したがって、ファイル内で小文字は無意味になります。
・ASQN 属性は常に有効です。無効にはできません。
・BLOB およびCLOBデータをデータベースから読み取ると、ディレクトリ構造内のLPTH=ディレクトリにファイルが自動的に作成されます(詳細については、「標準 X_RUNパラメータ」を参照してください)。
プラットフォームについて
プラットフォーム別の考慮事項については、「フィールド・タイプについて」を参照してください。
ヒントとテクニック
・BLOB とCLOBフィールドを使用する場合に、それらのフィールドを他のフィールドとは別のファイルに配置してメイン・ファイルと同じキーを使用する設計をお勧めします。これによりプログラマは、BLOBやCLOBデータのアクセスに別々のI/O操作を行わなければならなくなり、このデータの無差別な使用によるデータベース・パフォーマンス上の影響を軽減することができます。またこれは最も移植性の高い設計で、BLOB以外またはCLOB以外のデータに常に迅速にアクセスできるようになります。
・読み取り時に作成されるLOBディレクトリがLANSAセッションの終了時に削除されないことがあります。特別なプロセス*LOBCLNUPを時々実行することで、LOBディレクトリ構造をクリーンアップできます。このプロセスは、他のユーザーが作成したファイルを削除する十分な権限を持つユーザーが実行する必要があります。例えば、IBM i では次のコマンドを使用します。LANSA REQUEST(X_RUN) X_RUNADPRM('PROC=*LOBCLNUP')
さらに、次のトピックも参照してください。