ヘッダーをスキップ
Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド
11gリリース1(11.1)
E05675-02
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

16 BFILE操作用のLOB API

この章では、BFILEを使用する操作のためのAPIについて説明します。この章で説明するAPIのリストは、表16-1を参照してください。

この章では、操作ごとに次の項目について説明します。

この章の内容は次のとおりです。

BFILE APIについてサポートされている環境

表16-1「BFILE APIについてサポートされている環境」に、この章で説明するAPIについてサポートされているプログラム環境を示します。第1列は、APIで実行される操作を示します。その他の列は、そのAPIがPL/SQL、OCI、COBOL、Pro*C/C++、COMおよびJDBCでサポートされているかどうかに応じて、「はい」または「いいえ」となっています。

表16-1 BFILE APIについてサポートされている環境

操作 PL/SQL OCI COBOL Pro*C/C++ COM JDBC

BFILEを含む行の挿入

はい

はい

はい

はい

はい

はい

LOBへのBFILEデータのロード

はい

はい

はい

はい

はい

はい

FILEOPENを使用したBFILEのオープン

はい

はい

いいえ

いいえ

いいえ

はい

OPENを使用したBFILEのオープン

はい

はい

はい

はい

はい

はい

ISOPENを使用した、BFILEがオープンしているかどうかの確認

はい

はい

はい

はい

はい

はい

FILEISOPENを使用した、BFILEがオープンしているかどうかの確認

はい

はい

いいえ

いいえ

いいえ

はい

BFILEデータの表示

はい

はい

はい

はい

はい

はい

BFILEからのデータの読取り

はい

はい

はい

はい

はい

はい

SUBSTRを使用した、BFILEデータの一部の読取り

はい

いいえ

はい

はい

はい

はい

2つのBFILEの全体または一部の比較

はい

いいえ

はい

はい

はい

はい

INSTRを使用した、BFILEにパターンが存在するかどうかの確認

はい

いいえ

はい

はい

いいえ

はい

BFILEが存在するかどうかの確認


はい

はい

はい

はい

はい

はい

BFILEの長さの取得

はい

はい

はい

はい

はい

はい

BFILEロケータの割当て

はい

はい

はい

はい

いいえ

はい

BFILEのディレクトリ・オブジェクト名とファイル名の取得

はい

はい

はい

はい

はい

はい

初期化したBFILEロケータを使用したBFILEの更新

はい

はい

はい

はい

はい

はい

FILECLOSEを使用したBFILEのクローズ

はい

はい

いいえ

いいえ

はい

はい

CLOSEを使用したBFILEのクローズ

はい

はい

はい

はい

はい

はい

FILECLOSEALLを使用したオープン中のすべてのBFILEのクローズ

はい

はい

はい

はい

はい

はい


BFILEへのアクセス

BFILEにアクセスするには、次のインタフェースのいずれかを使用します。


関連項目:

BFILEへのアクセス用にサポートされている環境の詳細は、第7章「LOB APIの概要」を参照してください。

ディレクトリ・オブジェクト

ディレクトリ・オブジェクトを使用すると、BFILEデータ型のアクセスと使用方法を管理できます。ディレクトリ・オブジェクトは、アクセスするファイルが置かれているデータベース・サーバーのファイル・システムの物理ディレクトリの論理的な別名を示します。サーバーのファイル・システム内にあるファイルへは、ディレクトリ・オブジェクトに対する必要なアクセス権限が付与されている場合にかぎり、アクセスできます。Enterprise ManagerのWebコンソールを使用して、ディレクトリ・オブジェクトを管理することもできます。


関連項目:

  • 『Oracle Database SQL言語リファレンス』のCREATE DIRECTORYに関する項

  • 『Oracle Database 2日でデータベース管理者』を参照してください。WebベースのOracle Enterprise Manager Database Controlの説明を参照してください。


BFILEロケータの初期化

ディレクトリ・オブジェクトを使用すると、ファイルの位置を柔軟に扱えるようになり、アプリケーション内の物理ファイルの絶対パス名をハードコードしなくてもすみます。ディレクトリ・オブジェクト名は、BFILEロケータの初期化の際に、BFILENAMEファンクション(SQLおよびPL/SQL)またはOCILobFileSetName()(OCI)で使用されます。


注意:

データベースは、指定したディレクトリおよびパス名が実際に存在するかどうかは検証しません。ご使用のOSで有効なディレクトリを指定するよう注意してください。オペレーティング・システムがパス名の大/小文字を区別している場合は、必ず正しい形式でディレクトリを指定してください。最後のスラッシュを指定する必要はありません(たとえば、/tmp/ではなく、/tmpでもかまいません)。

ディレクトリの指定時には、「..」をパス内に含めることはできません(たとえば、/abc/def/hij..のようには指定できません)。


BFILEへのOSファイルの対応付け

OSファイルをBFILEに対応付けるために、まずOSファイルへのフルパス名の別名であるディレクトリ・オブジェクトを作成する必要があります。

既存のOSファイルを特定の表の関連するデータベース・レコードに対応付けるには、OracleのSQL DMLを使用します。次に例を示します。

  • BFILEの列がサーバーのファイル・システム内の既存ファイルを参照するようにBFILEを初期化するには、INSERTを使用します。

  • BFILEの参照ターゲットを変更するには、UPDATEを使用します。

  • BFILENAMEファンクションを使用して、BFILENULLに初期化してから、後でOSファイルを参照するように更新します。

  • OCIユーザーの場合、OCILobFileSetName()を使用して、INSERT文のVALUES句で使用されるBFILEロケータ変数を初期化することもできます。

ディレクトリの例

次の文では、ファイルImage1.gifおよびimage2.gifをそれぞれkey_valueが21および22のレコードに対応付けます。IMGは、Image1.gifおよびimage2.gifが格納される物理ディレクトリを示すディレクトリ・オブジェクトです。

次のようなデータ構造を設定しないと機能しない場合もあります。

CREATE TABLE Lob_table (
   Key_value NUMBER NOT NULL,
   F_lob BFILE)
   INSERT INTO Lob_table VALUES
      (21,  BFILENAME('IMG', 'Image1.gif'));
   INSERT INTO Lob_table VALUES
      (22, BFILENAME('IMG', 'image2.gif'));

次のUPDATE文は、key_valueが22の行の場合にターゲット・ファイルをimage3.gifに変更します。

   UPDATE Lob_table SET f_lob = BFILENAME('IMG', 'image3.gif')
       WHERE Key_value = 22;

注意:

データベースでは、BFILEロケータのディレクトリ・オブジェクトまたはファイル名に指定された環境変数は拡張されません。たとえば、次のように指定するとします。

BFILENAME('WORK_DIR', '$MY_FILE')

MY_FILEは、オペレーティング・システムで定義された環境変数であり、無効です。


BFILENAMEと初期化

BFILENAMEは、BFILE列が外部ファイルを参照するようにBFILEを初期化するために使用する組込みファンクションです。

SQL DMLを使用して物理ファイルがレコードに対応付けられると、BFILEに対するその後の読取り操作は、PL/SQLのDBMS_LOBパッケージおよびOCIを使用して実行できます。ただし、これらのファイルは、BFILEを介してアクセスされる場合は読取り専用であるため、BFILEによる更新または削除はできません。

BFILE参照セマンティクスであるため、同一レコード内または異なるレコード内に、同じファイルを参照する複数のBFILE列を持つことができます。たとえば、次のUPDATE文は、lob_table内でkey_valueが21の行を持つBFILEが、key_valueが22の行と同じファイルを参照するように設定します。

UPDATE lob_table
   SET f_lob = (SELECT f_lob FROM lob_table WHERE key_value = 22)
      WHERE key_value = 21;

初期化という点からBFILENAMEを考えてみます。このファンクションは、次の値を初期化できます。

BFILEデータ型の特性

BFILEデータ型を使用すると次のメリットがあります。

詳細は、DBMS_LOB.LOADFROMFILEの例を参照してください(「LOBへのBFILEデータのロード」を参照)。

OCIでBFILENAMEに相当するものはOCILobFileSetName()であり、同様に使用できます。

ディレクトリ名の指定

ディレクトリを作成するには、CREATE ANY DIRECTORYシステム権限が必要です。パス名に2つのピリオド(「..」)を含めることはできません。ディレクトリ・オブジェクトのネーミング規則は、表および索引のネーミング規則と同じです。つまり、通常の識別子は大文字で解釈されますが、デリミタ付き識別子はそのまま解釈されます。たとえば、次のような文があるとします。

CREATE OR REPLACE DIRECTORY scott_dir AS '/usr/home/scott';

この文によって、名前が「SCOTT_DIR」(大文字)のディレクトリ・オブジェクトが作成または再定義されます。ただし、次の文のように、ディレクトリ名にデリミタ付き識別子が使用されるとします。

CREATE DIRECTORY "Mary_Dir" AS '/usr/home/mary';

ディレクトリ・オブジェクトの名前は「Mary_Dir」になります。BFILENAMEをコールするときは、「SCOTT_DIR」および「Mary_Dir」を使用します。次に例を示します。

BFILENAME('SCOTT_DIR', 'afile')
BFILENAME('Mary_Dir', 'afile')

Windowsプラットフォーム上の場合

Windowsプラットフォーム上では、ディレクトリ名の大/小文字が区別されません。したがって、次の2つの文は同じディレクトリを表します。

CREATE DIRECTORY "big_cap_dir" AS "g:\data\source";

CREATE DIRECTORY "small_cap_dir" AS "G:\DATA\SOURCE";

BFILEセキュリティ

この項では、BFILEセキュリティ・モデルおよびそれに対応付けられたSQL文について説明します。BFILEセキュリティに関係する主なSQL文は、次のとおりです。

所有権および権限

ディレクトリ・オブジェクトは、システム所有のオブジェクトです。システム所有のオブジェクトの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。Oracle Databaseでは、次の2つの新しいシステム権限をサポートしており、これらはDBAのみに付与されます。

  • CREATE ANY DIRECTORY: ディレクトリ・オブジェクトの作成または変更用

  • DROP ANY DIRECTORY: ディレクトリ・オブジェクトの削除用

ディレクトリ・オブジェクトに対する読取り権限

ディレクトリ・オブジェクトに対するREAD権限によって、そのディレクトリ下に置かれたファイルを読み取ることができます。ディレクトリ・オブジェクトの作成者には、READ権限が自動的に付与されます。

GRANTオプション付きのREAD権限を付与されている場合は、その権限を他のユーザーやロールに付与して、自分の権限ドメインに追加することもできます。


注意:

READ権限は、個々のファイルではなくディレクトリ・オブジェクトのみに定義されます。したがって、同じディレクトリ内のファイルに異なる権限を割り当てることはできません。

ディレクトリ・オブジェクトが表す物理ディレクトリには、Oracleサーバー・プロセスに対する適切なOS権限(この場合は読取り)が含まれていない場合もあります。

DBAは、次のことを確認する必要があります。

  • 物理ディレクトリの存在

  • Oracleサーバー・プロセスに対して、ファイル、ディレクトリおよびディレクトリへのパスの読取り権限が使用可能になっていること

  • データベース・ユーザーによってファイル・アクセスが行われている間、ディレクトリおよび読取り権限が使用可能な状態に保たれていること

ここでの権限とは、単にOracleサーバーがそのディレクトリ内のファイルを読むことができるということです。これらの権限は、実際のファイル操作時に、PL/SQLのDBMS_LOBパッケージおよびOCI APIによってチェックおよび施行されます。


注意:

CREATE ANY DIRECTORY権限およびDROP ANY DIRECTORY権限によって、サーバーのファイル・システムがすべてのデータベース・ユーザーに公開される可能性があるため、DBAは、セキュリティ違反を防止するため、一般のデータベース・ユーザーに対するこれらの権限の付与は慎重に行う必要があります。


BFILE固有のSQL DDLのセキュリティ

ディレクトリ・オブジェクトを作成、置換および削除する次のSQL DDL文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

  • CREATE DIRECTORY

  • DROP DIRECTORY

BFILE固有のSQL DMLのセキュリティ

BFILEに対してセキュリティを提供する次のSQL DML文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

  • GRANT(システム権限)

  • GRANT(オブジェクト権限)

  • REVOKE(システム権限)

  • REVOKE(オブジェクト権限)

  • AUDIT(新規文)

  • AUDIT(スキーマ・オブジェクト)

ディレクトリのカタログ・ビュー

カタログ・ビューは、ディレクトリ・オブジェクト用に提供され、これによってユーザーは、オブジェクトの名前、および対応するパスおよび権限を参照できます。サポートされるビューは次のとおりです。

  • ALL_DIRECTORIESOWNERDIRECTORY_NAMEDIRECTORY_PATH

    このビューには、ユーザーがアクセスできるすべてのディレクトリが記述されます。

  • DBA_DIRECTORIESOWNERDIRECTORY_NAMEDIRECTORY_PATH

    このビューには、データベース全体について指定されたすべてのディレクトリが記述されます。

ディレクトリ・オブジェクト使用のガイドライン

ディレクトリ機能の主な目的は、サーバーのファイル・システム内の大きなファイルへのアクセスをDBAが管理するうえで、単純で柔軟性があり、既存アプリケーションの変更が不要で、安全性の高いメカニズムを使用可能にすることです。ただし、この目的を実現するには、DBAがディレクトリ・オブジェクトの使用時に次のガイドラインに従うことが非常に重要です。

  • ディレクトリ・オブジェクトは、データファイルのディレクトリにマップしないでください。ディレクトリ・オブジェクトは、Oracleデータファイル、制御ファイル、ログ・ファイルおよび他のシステム・ファイルを含む物理ディレクトリにマップしないでください。これらのファイルを(不意にまたはなんらかの理由で)変更すると、データベースまたはサーバーのOSが破損する場合があります。

  • DBAのみがシステム権限を持つ必要があります。CREATE ANY DIRECTORYなどのシステム権限(DBAにあらかじめ付与される)を他のユーザーに付与する場合は、慎重に行ってください。多くの場合、データベース管理者のみが、これらの権限を持ちます。

  • DIRECTORY権限を付与するときには、十分な注意が必要です。ディレクトリ・オブジェクトへの権限を他のユーザーに付与する場合は、注意が必要です。同様に、権限をユーザーに付与するときは、WITH GRANT OPTION句の使用にも注意が必要です。

  • データベースの運用中に、ディレクトリ・オブジェクトを削除または置換しないでください。ディレクトリ・オブジェクトは、安易な判断でデータベース運用中に削除または置換しないようにします。ディレクトリ・オブジェクトを削除または置換した場合、このディレクトリ・オブジェクトに対応付けられているすべてのファイルのすべてのセッションからの操作が正常に実行されなくなります。さらに、これらのファイルを正常にクローズする前にDROPコマンドまたはREPLACEコマンドを実行した場合は、プログラムにおけるこれらのファイルへの参照が失われ、これらのファイルに対応付けられているシステム・リソースも、セッションを停止するまで解放されなくなります。

    この場合、PL/SQLユーザーに可能な手段は、たとえばDBMS_LOB.FILECLOSEALLをコールするプログラム・ブロックを実行してファイル操作を再開するか、または各セッションをすべて終了するかのいずれかです。したがって、これらのコマンドは慎重に使用し、できればメンテナンスの停止時間中に使用します。

  • ユーザーのDIRECTORYオブジェクト権限を取り消すときには、十分な注意が必要です。REVOKE文を使用してユーザーのDIRECTORYオブジェクト権限を取り消した場合、ユーザーのセッションに依存するファイルへの、その後の操作が正常に実行されません。ユーザーは、権限を再取得してファイルをクローズするか、またはセッションでFILECLOSEALLを実行し、ファイル操作を再開する必要があります。

一般的に、ファイル・アクセスの管理にディレクトリ・オブジェクトを使用することは、OSレベルでのシステム管理作業の延長です。ファイルは、計画を立てることによって、Oracleプロセス用のREAD権限を持つ適切なディレクトリに論理的に構成できます。

これらの物理ファイルにマップするREAD権限とともにディレクトリ・オブジェクトを作成し、特定のデータベース・ユーザーにこれらのディレクトリへのアクセス権限を付与できます。

共有サーバー(マルチスレッド・サーバー)・モードのBFILE

データベースでは、共有サーバー(マルチスレッド・サーバー)・モードでのBFILEデータ型のセッション移行がサポートされません。これは、オープンされたBFILEインスタンスに対する操作を、共有サーバーへのコール終了後も継続できることを意味します。

BFILE操作が含まれる共有サーバーのセッションは、1台の共有サーバーに限定され、サーバー間での移行はできません。この制約は、次回のリリースではなくなります。

外部LOB(BFILE)ロケータ

BFILEでは、値はサーバー側のOSファイル(データベースの外部)に格納されます。そのファイルを参照するBFILEロケータは、インラインに格納されます。

BFILE表内の2つの行が同じファイルを参照するとき

DBMS_LOB.FILEOPENで使用されるBFILEロケータ変数(たとえばL1)が、別のロケータ変数(たとえばL2)に割り当てられた場合、L1およびL2はどちらも同じファイルを参照します。BFILE列を持つ表の2つの行は、同じファイルを参照することも、2つの異なるファイルを参照することもできます。このことは、開発者が慎重であればメリットになりますが、そうでなければデメリットになる場合があります。

BFILEロケータ変数

BFILEロケータ変数は、他の自動変数と同じように機能します。ファイル操作に関しては、最も標準的なプログラミング言語の標準I/Oの一部として利用できるファイル記述子と同じように機能します。BFILEロケータを定義および初期化し、このロケータによって参照されるファイルをオープンした場合、このファイルをクローズするまでのすべての操作は、このロケータまたはこのロケータのローカル・コピーを使用して、同じプログラム・ブロック内から実行する必要があることを意味します。

BFILE固有のガイドライン

BFILEを操作するときのガイドラインは、次のとおりです。

  • ファイルは、同じネスト・レベルにある、同じプログラム・ブロックからオープンおよびクローズします。BFILEロケータ変数は、スカラーと同様、他のプロシージャ、メンバー・メソッドまたは外部関数コールアウトのパラメータとして使用できます。ただし、ファイルのオープンおよびクローズは、同じネスト・レベルにある、同じプログラム・ブロックから行うことをお薦めします。

  • オブジェクトをデータベースにフラッシュする前に、BFILE値を設定します。オブジェクトにBFILEが含まれる場合、データベースにオブジェクトをフラッシュする前にBFILE値を設定する必要があります。それによって、新しい行を挿入できます。つまり、OCIObjectNew()の後でかつOCIObjectFlush()の前に、OCILobFileSetName()をコールする必要があります。

  • BFILEを挿入または更新する前に、ディレクトリ・オブジェクト名およびファイル名を指定します。ディレクトリ・オブジェクト名およびファイル名を指定せずにBFILEを挿入または更新すると、エラーになります。

    この規則は、INSERT文またはUPDATE文でBFILEに対してOCIバインド変数を使用するユーザーにも適用されます。INSERT文またはUPDATE文を発行する前に、OCIバインド変数をディレクトリ・オブジェクト名およびファイル名で初期化する必要があります。

  • 挿入または更新する前にBFILEを初期化します。


    注意:

    OCISetAttr()では、BFILEロケータをNULLに設定できません。

  • BFILEを持つ行を挿入または更新するためのSQLを使用する前に、BFILEを次のいずれかに初期化する必要があります。

    • NULL(OCIバインド変数を使用している場合は不可)

    • ディレクトリ・オブジェクト名とファイル名

  • パス名の指定のどこにも2つのピリオド(「..」)を含めることはできません。ファイル名の最初に2つのピリオドを使用することもできません。

LOBへのBFILEデータのロード

この項では、BFILEのデータをLOBにロードする方法について説明します。


関連項目:

BFILE操作と各プログラム環境で提供されるAPIのリストは、表16-1「BFILE APIについてサポートされている環境」を参照してください。

事前条件

このプロシージャをコールする前に、次の事前条件を満たしている必要があります。

使用上の注意


注意:

LOADBLOBFROMFILEおよびLOADCLOBFROMFILEプロシージャによって、このプロシージャの機能が実装されるため、バイナリ・データおよび文字データのロード機能が向上します。機能が向上したプロシージャは、PL/SQL環境でのみ使用できます。可能なかぎり、機能が向上したプロシージャを使用することをお薦めします。詳細は、「BLOBへのBFILEデータのロード」および「CLOBまたはNCLOBへのBFILEデータのロード」を参照してください。

キャラクタ・セットの変換

OCIまたはOCI機能にアクセスするプログラム環境を使用する場合、キャラクタ・セットの変換は、1つのキャラクタ・セットから別のキャラクタ・セットに変換するときに、暗黙的に実行されます。

BFILEからCLOBまたはNCLOBへのロード: バイナリ・データからキャラクタ・セットへの変換

DBMS_LOB.LOADFROMFILEプロシージャを使用してCLOBまたはNCLOBに移入する場合は、BFILEのバイナリ・データをLOBに移入することになります。バイナリ・データからキャラクタ・セットへの場合は、暗黙的な変換は実行されません。このため、テキストをロードする場合はLOADCLOBFROMFILEプロシージャを使用します(「CLOBまたはNCLOBへのBFILEデータのロード」を参照)。


関連項目:

キャラクタ・セット変換の問題点は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

量パラメータ

量パラメータには、次の注意事項があります。

構文

各プログラム環境における構文については、次のマニュアルの項を参照してください。

次のプログラム環境での例を示します。

OPENを使用したBFILEのオープン

この項では、OPENファンクションを使用してBFILEをオープンする方法について説明します。


注意:

BFILEをオープンするには、FILEOPENファンクションを使用する方法もありますが、新規に開発する場合にはOPENファンクションを使用することをお薦めします。FILEOPENファンクションを使用する方法は、「FILEOPENを使用したBFILEのオープン」を参照してください。


関連項目:

BFILE操作と各プログラム環境で提供されるAPIのリストは、表16-1「BFILE APIについてサポートされている環境」を参照してください。

構文

各プログラム環境における構文については、次のマニュアルの項を参照してください。

使用例

次の例では、OSファイルADPHOTO_DIRのイメージをオープンします。

次のプログラム環境での例を示します。

FILEOPENを使用したBFILEのオープン

この項では、FILEOPENファンクションを使用してBFILEをオープンする方法について説明します。


注意:

新規アプリケーション開発には、FILEOPENファンクションをお薦めしません。OPENファンクションを使用することをお薦めします。「OPENを使用したBFILEのオープン」を参照してください。


関連項目:

BFILE操作と各プログラム環境で提供されるAPIのリストは、表16-1「BFILE APIについてサポートされている環境」を参照してください。

BFILEオープン時の使用上の注意

古いFILEOPEN形式の使用を継続することもできますが、OPENは将来の拡張性を備えているため、切り替えることをお薦めします。

構文

各プログラム環境における構文については、次のマニュアルの項を参照してください。

BFILEのオープンの使用例

次の例では、ディレクトリ・オブジェクトMEDIA_DIRkeyboard_logo.jpgをオープンします。

次のプログラム環境での例を示します。

ISOPENを使用した、BFILEがオープンしているかどうかの確認

この項では、ISOPENを使用して、BFILEがオープンしているかどうかを確認する方法について説明します。


注意:

新規アプリケーション開発には、このファンクション(ISOPEN)をお薦めします。古いFILEISOPENファンクションはお薦めしません。詳細は、「FILEISOPENを使用した、BFILEがオープンしているかどうかの確認」を参照してください。


関連項目:

BFILE操作と各プログラム環境で提供されるAPIのリストは、表16-1「BFILE APIについてサポートされている環境」を参照してください。

構文

各プログラム環境における構文については、次のマニュアルの項を参照してください。

次のプログラム環境での例を示します。

FILEISOPENを使用した、BFILEがオープンしているかどうかの確認

この項では、FILEISOPENファンクションを使用して、BFILEがオープンしているかどうかを確認する方法について説明します。


注意:

新規アプリケーション開発には、FILEISOPENファンクションをお薦めしません。ISOPENファンクションを使用することをお薦めします。「ISOPENを使用した、BFILEがオープンしているかどうかの確認」を参照してください。


関連項目:

BFILE操作と各プログラム環境で提供されるAPIのリストは、表16-1「BFILE APIについてサポートされている環境」を参照してください。

使用上の注意

古いFILEISOPEN形式の使用を継続することもできますが、ISOPENは将来の拡張性を備えているため、切り替えることをお薦めします。

構文

各プログラム環境における構文については、次のマニュアルの項を参照してください。

使用例

次の例では、ad_graphicに対応付けられているBFILEがオープンしているかどうかを問い合せます。

次のプログラム環境での例を示します。

BFILEデータの表示

この項では、BFILEデータを表示する方法について説明します。


関連項目:

BFILE操作と各プログラム環境で提供されるAPIのリストは、表16-1「BFILE APIについてサポートされている環境」を参照してください。

構文

各プログラム環境における構文については、次のマニュアルの項を参照してください。

次のプログラム環境での例を示します。

BFILEからのデータの読取り

この項では、BFILEからデータを読み取る方法について説明します。


関連項目:

BFILE操作と各プログラム環境で提供されるAPIのリストは、表16-1「BFILE APIについてサポートされている環境」を参照してください。

使用上の注意

この操作を使用する場合は、次のことに注意してください。

OCIでのストリーム読取り

大量のBFILEデータを最も効率よく読み取るには、ストリーム・メカニズムを有効にしたOCILobRead2()でポーリングまたはコールバックを使用します。そのためには、次のようにoffsetパラメータを使用して読取り開始位置を指定します。

ub8  char_amt =  0;
ub8  byte_amt =  0;
ub4  offset = 1000;

OCILobRead2(svchp, errhp, locp, &byte_amt, &char_amt, offset, bufp, bufl,
            OCI_ONE_PIECE, 0, 0, 0, 0);

ポーリング・モードを使用した場合は、各OCILobRead2()コール後にbyte_amtパラメータの値を調べて、バッファに何バイト読み取られたかを確認してください。これは、バッファがいっぱいになっていない場合があるためです。

コールバックを使用すると、コールバックへの入力であるlenpパラメータにバッファに格納されたバイト数が示されます。このlenpパラメータを、コールバック処理中に確認してください。バッファいっぱいまでデータが格納されていない場合があります(『Oracle Call Interfaceプログラマーズ・ガイド』を参照)。

量パラメータ

構文

各プログラム環境における構文については、次のマニュアルの項を参照してください。

次のプログラム環境での例を示します。

SUBSTRを使用した、BFILEデータの一部の読取り

この項では、SUBSTRを使用してBFILEデータの一部を読み取る方法について説明します。


関連項目:

BFILE操作と各プログラム環境で提供されるAPIのリストは、表16-1「BFILE APIについてサポートされている環境」を参照してください。

構文

各プログラム環境における構文については、次のマニュアルの項を参照してください。

次のプログラム環境での例を示します。

2つのBFILEの全体または一部の比較

この項では、2つのBFILEの全体または一部を比較する方法について説明します。


関連項目:

BFILE操作と各プログラム環境で提供されるAPIのリストは、表16-1「BFILE APIについてサポートされている環境」を参照してください。

構文

各プログラム環境における構文については、次のマニュアルの項を参照してください。

次のプログラム環境での例を示します。

INSTRを使用した、BFILEにパターンが存在するかどうかの確認

この項では、INSTRを使用して、BFILEにパターンが存在するかどうかを確認する方法について説明します。


関連項目:

BFILE操作と各プログラム環境で提供されるAPIのリストは、表16-1「BFILE APIについてサポートされている環境」を参照してください。

構文

各プログラム環境における構文については、次のマニュアルの項を参照してください。

次のプログラム環境での例を示します。

BFILEが存在するかどうかの確認

このプロシージャでは、BFILEロケータが有効なBFILEインスタンスを指しているかどうかを確認します。


関連項目:

BFILE操作と各プログラム環境で提供されるAPIのリストは、表16-1「BFILE APIについてサポートされている環境」を参照してください。

構文

各プログラム環境における構文については、次のマニュアルの項を参照してください。

次のプログラム環境での例を示します。

BFILEの長さの取得

この項では、BFILEの長さを取得する方法について説明します。


関連項目:

BFILE操作と各プログラム環境で提供されるAPIのリストは、表16-1「BFILE APIについてサポートされている環境」を参照してください。

構文

各プログラム環境における構文については、次のマニュアルの項を参照してください。

次のプログラム環境での例を示します。

BFILEロケータの割当て

この項では、1つのBFILEロケータを他のBFILEロケータに割り当てる方法について説明します。


関連項目:

BFILE操作と各プログラム環境で提供されるAPIのリストは、表16-1「BFILE APIについてサポートされている環境」を参照してください。

構文

各プログラム環境における構文については、次のマニュアルの項を参照してください。

次のプログラム環境での例を示します。

BFILEのディレクトリ・オブジェクト名とファイル名の取得

この項では、BFILEのディレクトリ・オブジェクト名とファイル名を取得する方法について説明します。


関連項目:

BFILE操作と各プログラム環境で提供されるAPIのリストは、表16-1「BFILE APIについてサポートされている環境」を参照してください。

構文

各プログラム環境における構文については、次のマニュアルの項を参照してください。

次のプログラム環境での、このプロシージャの例を示します。

初期化したBFILEロケータを使用したBFILEの更新

この項では、初期化したBFILEロケータを使用してBFILEを更新する方法について説明します。


関連項目:

BFILE操作と各プログラム環境で提供されるAPIのリストは、表16-1「BFILE APIについてサポートされている環境」を参照してください。

構文

各プログラム環境における構文については、次のマニュアルの項を参照してください。

次のプログラム環境での例を示します。

FILECLOSEを使用したBFILEのクローズ

この項では、FILECLOSEを使用してBFILEをクローズする方法について説明します。


注意:

新規開発には、このファンクション(FILECLOSE)をお薦めしません。かわりにCLOSEファンクションを使用してください。詳細は、「CLOSEを使用したBFILEのクローズ」を参照してください。


関連項目:

BFILE操作と各プログラム環境で提供されるAPIのリストは、表16-1「BFILE APIについてサポートされている環境」を参照してください。

構文

各プログラム環境における構文については、次のマニュアルの項を参照してください。

CLOSEを使用したBFILEのクローズ

この項では、CLOSEファンクションを使用してBFILEをクローズする方法について説明します。


注意:

新規アプリケーション開発には、このファンクション(CLOSE)をお薦めします。新規開発には、古いFILECLOSEファンクションをお薦めしません。


関連項目:

BFILE操作と各プログラム環境で提供されるAPIのリストは、表16-1「BFILE APIについてサポートされている環境」を参照してください。

使用上の注意

BFILEのオープンとクローズは必須操作です。インスタンスはセッション中に後でクローズする必要があります。

構文

各プログラム環境における構文については、次のマニュアルの項を参照してください。

FILECLOSEALLを使用したオープン中のすべてのBFILEのクローズ

この項では、オープン中のすべてのBFILEをクローズする方法について説明します。

BFILEインスタンスは、プログラムの終了前にクローズする必要があります。たとえば、オープンしているBFILEインスタンスはすべて、PL/SQLブロックやOCIプログラムの終了する前にクローズする必要があります。

アプリケーションに例外が発生したり異常終了した場合も、オープンしているBFILEインスタンスをクローズする必要があります。このような場合にBFILEインスタンスをクローズしないと、データベースでオープン状態であるとみなされます。このような場合にBFILEインスタンスがオープン状態のままにならないような例外処理方法を使用していることを確認してください。


関連項目:


構文

各プログラム環境における構文については、次のマニュアルの項を参照してください。

BFILEを含む行の挿入

この項では、初期化したBFILEロケータを使用してBFILEを含む行を挿入する方法について説明します。


関連項目:


使用上の注意

INSERT文を発行する前に、BFILEロケータ・バインド変数を、NULLか、またはディレクトリ・オブジェクトおよびファイルの名前に初期化する必要があります。

構文

各プログラム環境における構文については、次のマニュアルの項を参照してください。

次のプログラム環境での例を示します。