11 BFILE操作用のLOB API
BFILE
を使用する操作用のAPIを、表11-1に示します。
操作ごとに次の項目について説明します。
-
「使用上のノート」では、特定のプログラム環境またはデータ型に固有の情報など、実装に関するガイドラインを示します。
-
「構文」では、サポートされているプログラム環境ごとに構文の参照先マニュアルを示します。
-
「例」では、サンプルの実行に必要な設定タスクについて説明します。掲載されているデモ・ファイルは、
$ORACLE_HOME/rdbms/demo/lobs/
のplsql
、oci
、vb
およびjava
という名前のサブディレクトリにあります。ドライバ・プログラムlobdemo.sql
は/plsql
にあり、ドライバ・プログラムlobdemo.c
は/oci
にあります。ノート:
LOB APIでは、
BFILE
へのデータのロードはサポートされません。関連項目:
BFILE
にデータをロードする方法の詳細は、「SQL*Loaderを使用したLOBのロード」を参照してください。
内容は次のとおりです。
11.1 BFILE APIについてサポートされている環境
表11-1に、APIに対してサポートされているプログラム環境を示します。第1列は、APIで実行される操作を示します。その他の列は、そのAPIがPL/SQL、OCI、COBOL、Pro*C/C++およびJDBCでサポートされているかどうかに応じて、「はい」または「いいえ」となっています。
表11-1 BFILE APIについてサポートされている環境
操作 | PL/SQL | OCI | COBOL | Pro*C/C++ | JDBC |
---|---|---|---|---|---|
はい |
はい |
はい |
はい |
はい |
|
はい |
はい |
はい |
はい |
はい |
|
はい |
はい |
いいえ |
いいえ |
はい |
|
はい |
はい |
はい |
はい |
はい |
|
はい |
はい |
はい |
はい |
はい |
|
はい |
はい |
いいえ |
いいえ |
はい |
|
はい |
はい |
はい |
はい |
はい |
|
はい |
はい |
はい |
はい |
はい |
|
はい |
いいえ |
はい |
はい |
はい |
|
はい |
いいえ |
はい |
はい |
はい |
|
はい |
いいえ |
はい |
はい |
はい |
|
はい |
はい |
はい |
はい |
はい |
|
はい |
はい |
はい |
はい |
はい |
|
はい |
はい |
はい |
はい |
はい |
|
はい |
はい |
はい |
はい |
はい |
|
はい |
はい |
はい |
はい |
はい |
|
はい |
はい |
いいえ |
いいえ |
はい |
|
はい |
はい |
はい |
はい |
はい |
|
はい |
はい |
はい |
はい |
はい |
11.2 BFILEへのアクセスについて
BFILE
にアクセスするには、次のインタフェースのいずれかを使用します。
-
OCI(Oracle Call Interface)
-
PL/SQL(DBMS_LOBパッケージ)
-
Pro*C/C++やPro*COBOLなどのプリコンパイラ
-
Java (JDBC)
関連項目:
BFILE
へのアクセス用にサポートされている環境の詳細は、「LOB APIの概要」を参照してください。
11.3 ディレクトリ・オブジェクト
ディレクトリ・オブジェクトを使用すると、
BFILE
データ型のアクセスと使用方法を管理できます。
ディレクトリ・オブジェクトには、アクセスするファイルがあるデータベース・サーバー・ファイルシステム上の物理ディレクトリの論理的な別名を指定します。サーバーのファイルシステム内にあるファイルへは、
ディレクトリ・オブジェクトに対する必要なアクセス権限が付与されている場合にかぎり、アクセスできます。Oracle Enterprise Manager Cloud Controlを使用して
ディレクトリ・オブジェクトを管理することもできます。
関連項目:
-
『Oracle Database SQL言語リファレンス』の
CREATE
DIRECTORY
に関する項 -
Oracle Enterprise Manager Cloud Controlの詳細は、『Oracle Database管理者ガイド』を参照してください
11.3.1 BFILEロケータの初期化
ディレクトリ・オブジェクトを使用すると、ファイルの位置を柔軟に扱えるようになり、アプリケーション内の物理ファイルの絶対パス名をハードコードしなくてもすみます。
ディレクトリ・オブジェクト名は、BFILE
ロケータの初期化の際に、BFILENAME
ファンクション(SQLおよびPL/SQL)またはOCILobFileSetName()
(OCI)で使用されます。
警告:
データベースは、指定したディレクトリおよびパス名が実際に存在するかどうかは検証しません。ご使用のオペレーティング・システムで有効なディレクトリを指定するよう注意してください。オペレーティング・システムでパス名の大文字と小文字が区別される場合は、必ず正しい形式でディレクトリを指定してください。最後のスラッシュを指定する必要はありません(たとえば、/tmp/
ではなく、/tmp
でもかまいません)。
ディレクトリの指定時には、「..」をパス内に含めることはできません(たとえば、/abc/def/hij..
のようには指定できません)。
11.3.2 BFILEへのオペレーティング・システム・ファイルの対応付け
オペレーティング・システムファイルをBFILE
に対応付けるために、まずオペレーティング・システム・ファイルへのフルパス名の別名であるディレクトリ・オブジェクトを作成する必要があります。
既存のオペレーティング・システム・ファイルを特定の表の関連するデータベース・レコードに対応付けるには、OracleのSQL DMLを使用します。次に例を示します。
-
BFILE
の列がサーバーのファイルシステム内の既存ファイルを参照するようにBFILEを初期化するには、INSERT
を使用します。 -
BFILE
の参照ターゲットを変更するには、UPDATE
を使用します。 -
BFILENAME
ファンクションを使用して、BFILE
をNULL
に初期化してから、後でオペレーティング・システム・ファイルを参照するように更新します。 -
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
は、オペレーティング・システムで定義された環境変数であり、無効です。
11.4 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
列 -
PL/SQLモジュール内で宣言される
BFILE
(自動)変数
11.5 BFILEデータ型の特性
BFILE
データ型を使用すると次のメリットがあります。
-
特定の
BFILE
が、一時的に、操作中のモジュール内にかぎり必要な場合、データベース内の列に対応付けることなく、BFILE
関連のAPIを変数に対して使用できます。 -
サーバー側の表に
BFILE
列を作成し、列の値を初期化した後、SELECT
を使用してその列の値を取り出す必要がないため、サーバーへのラウンドトリップの必要がなくなります。
DBMS_LOB
.LOADFROMFILE
に関連する例については、「BFILEデータを使用したLOBのロードについて」を参照してください。
OCIでBFILENAME
に相当するものはOCILobFileSetName()
であり、同様に使用できます。
11.5.1 ディレクトリ名の指定
ディレクトリを作成するには、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')
11.6 BFILEセキュリティ
BFILE
セキュリティは、BFILE
セキュリティ・モデルおよびそれに対応付けられたSQL文に関連しています。BFILE
セキュリティに関係する主なSQL文は、次のとおりです。
-
SQL DDL:
ディレクトリ・オブジェクトの
CREATE
およびREPLACE
またはALTER
-
SQL DML:
ディレクトリ・オブジェクトに対する
READ
システム権限およびオブジェクト権限のGRANT
およびREVOKE
11.6.1 所有権および権限
ディレクトリ・オブジェクトは、システム所有のオブジェクトです。
システム所有のオブジェクトの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。Oracle Databaseでは、次の2つの新しいシステム権限をサポートしており、これらはDBAのみに付与されます。
-
CREATE
ANY
DIRECTORY
:ディレクトリ・オブジェクトの作成または変更用
-
DROP
ANY
DIRECTORY
:ディレクトリ・オブジェクトの削除用
11.6.2 ディレクトリ・オブジェクトに対する読取り権限
ディレクトリ・オブジェクトに対する
READ
権限によって、そのディレクトリ下に置かれたファイルを読み取ることができます。ディレクトリ・オブジェクトの作成者には、
READ
権限が自動的に付与されます。
GRANT
オプション付きのREAD
権限を付与されている場合は、その権限を他のユーザーやロールに付与して、自分の権限ドメインに追加することもできます。
ノート:
READ
権限は、個々のファイルではなくディレクトリ・オブジェクトのみに定義されます。したがって、同じディレクトリ内のファイルに異なる権限を割り当てることはできません。
表される物理ディレクトリは、Oracleサーバー・プロセスに必要な、対応するオペレーティング・システム権限(この場合は読取り権限)が含まれていない場合もあります。
DBAは、次のことを確認する必要があります。
-
物理ディレクトリの存在
-
ファイル、ディレクトリ、ディレクトリへのパスで、Oracleサーバー・プロセスに対する読取り権限が有効であること
-
データベース・ユーザーがファイルにアクセスする間は終始、ディレクトリが使用可能な状態であり、読取り権限も有効であること
ここでの権限とは、単にOracleサーバーがそのディレクトリ内のファイルを読むことができるということです。これらの権限は、実際のファイル操作時に、PL/SQLのDBMS_LOB
パッケージおよびOCI APIによってチェックおよび施行されます。
警告:
CREATE
ANY
DIRECTORY
権限およびDROP
ANY
DIRECTORY
権限によって、サーバーのファイルシステムがすべてのデータベース・ユーザーに公開される可能性があるため、DBAは、セキュリティ違反を防止するため、一般のデータベース・ユーザーに対するこれらの権限の付与は慎重に行う必要があります。
11.6.3 BFILEセキュリティ用のSQL DDL
関連項目:
ディレクトリ・オブジェクトを作成、置換、削除する次のSQL DDL文の詳細は、Oracle Database SQL言語リファレンスを参照してください。
-
CREATE
DIRECTORY
-
DROP
DIRECTORY
11.6.4 BFILEセキュリティ用のSQL DML
関連項目:
BFILE
に対してセキュリティを提供する次のSQL DML文の詳細は、Oracle Database SQL言語リファレンスを参照してください。
-
GRANT
(システム権限) -
GRANT
(オブジェクト権限) -
REVOKE
(システム権限) -
REVOKE
(オブジェクト権限) -
AUDIT
(新規文) -
AUDIT
(スキーマ・オブジェクト)
11.6.5 ディレクトリのカタログ・ビュー
カタログ・ビューは、ディレクトリ・オブジェクト用に提供され、これによってユーザーは、オブジェクトの名前、および対応するパスおよび権限を参照できます。サポートされるビューは次のとおりです。
-
ALL_DIRECTORIES
(OWNER
、DIRECTORY_NAME
、DIRECTORY_PATH
)このビューには、ユーザーがアクセスできるすべてのディレクトリが記述されます。
-
DBA_DIRECTORIES
(OWNER
、DIRECTORY_NAME
、DIRECTORY_PATH
)このビューには、データベース全体について指定されたすべてのディレクトリが記述されます。
11.6.6 ディレクトリ・オブジェクト使用のガイドライン
ディレクトリ機能の主な目的は、サーバーのファイルシステム内の大きなファイルへのアクセスをDBAが管理するうえで、単純で柔軟性があり、既存アプリケーションの変更が不要で、安全性の高いメカニズムを使用可能にすることです。ただし、この目的を実現するには、DBAが
ディレクトリ・オブジェクトの使用時に次のガイドラインに従うことが非常に重要です。
-
ディレクトリ・オブジェクトは、データファイルの
ディレクトリにマップしないでください。
ディレクトリ・オブジェクトは、Oracleデータファイル、制御ファイル、ログ・ファイルおよび他のシステム・ファイルを含む物理ディレクトリにマップしないでください。これらのファイルを(不意にまたはなんらかの理由で)変更すると、データベースまたはサーバーのオペレーティング・システムが破損する場合があります。
-
DBAのみがシステム権限を持つ必要があります。
CREATE
ANY
DIRECTORY
などのシステム権限(DBAにあらかじめ付与される)を他のユーザーに付与する場合は、慎重に行ってください。多くの場合、データベース管理者のみが、これらの権限を持ちます。 -
DIRECTORY権限を付与するときには、十分な注意が必要です。
ディレクトリ・オブジェクトへの権限を他のユーザーに付与する場合は、注意が必要です。同様に、権限をユーザーに付与するときは、
WITH
GRANT
OPTION
句の使用にも注意が必要です。 -
データベースの運用中に、
ディレクトリ・オブジェクトを削除または置換しないでください。
ディレクトリ・オブジェクトは、安易な判断でデータベース運用中に削除または置換しないようにします。ディレクトリ・オブジェクトを削除または置換した場合、この
ディレクトリ・オブジェクトに対応付けられているすべてのファイルのすべてのセッションからの操作が正常に実行されなくなります。さらに、これらのファイルを正常にクローズする前に
DROP
コマンドまたはREPLACE
コマンドを実行した場合は、プログラムにおけるこれらのファイルへの参照が失われ、これらのファイルに対応付けられているシステム・リソースも、セッションを停止するまで解放されなくなります。この場合、PL/SQLユーザーに可能な手段は、たとえば
DBMS_LOB
.FILECLOSEALL
をコールするプログラム・ブロックを実行してファイル操作を再開するか、または各セッションをすべて終了するかのいずれかです。したがって、これらのコマンドは慎重に使用し、できればメンテナンスの停止時間中に使用します。 -
ユーザーの
DIRECTORY
オブジェクト権限を取り消すときには、十分な注意が必要です。REVOKE
文を使用してユーザーのDIRECTORY
オブジェクト権限を取り消した場合、ユーザーのセッションに依存するファイルへの、その後の操作が正常に実行されません。ユーザーは、権限を再取得してファイルをクローズするか、またはセッションでFILECLOSEALL
を実行し、ファイル操作を再開する必要があります。
一般的に、ファイル・アクセスの管理にディレクトリ・オブジェクトを使用することは、OSレベルでのシステム管理作業の延長です。ファイルは、計画を立てることによって、Oracleプロセス用のREAD権限を持つ適切なディレクトリに論理的に構成できます。
これらの物理ファイルにマップするREAD
権限とともにディレクトリ・オブジェクトを作成し、特定のデータベース・ユーザーにこれらのディレクトリへのアクセス権限を付与できます。
11.6.8 外部LOB(BFILE)ロケータ
BFILE
では、値はサーバー側のオペレーティング・システム・ファイル(データベースの外部)に格納されます。そのファイルを参照するBFILE
ロケータは、インラインに格納されます。
11.6.8.1 BFILE表内の2つの行が同じファイルを参照するとき
DBMS_LOB
.FILEOPEN
で使用されるBFILE
ロケータ変数(たとえば、L1)が、別のロケータ変数(たとえば、L2)に割り当てられる場合、L1とL2の両方が同じファイルを示します。
つまり、BFILE
列がある1つの表の2つの行が、同じファイルまたは別の2つのファイルを参照できるということです。この点は、賢明な開発者にとってはメリットになりますが、不注意な開発者にとっては落とし穴にもなりかねません。
11.6.8.2 BFILEロケータ変数
BFILE
ロケータ変数は、他の自動変数と同じように機能します。ファイル操作の場合の動作は、ほとんどの従来型プログラム言語の標準入出力ライブラリの一部として使用可能なファイル・ディスクリプタと同様です。
BFILE
ロケータを定義および初期化し、このロケータによって参照されるファイルをオープンした場合、このファイルをクローズするまでのすべての操作は、このロケータまたはこのロケータのローカル・コピーを使用して、同じプログラム・ブロック内から実行する必要があることを意味します。
11.6.8.3 BFILE固有のガイドライン
BFILE
を操作するときのガイドラインは、次のとおりです。
-
ファイルは、同じネスト・レベルにある、同じプログラム・ブロックからオープンおよびクローズします。
BFILE
ロケータ変数は、スカラーと同様、他のプロシージャ、メンバー・メソッドまたは外部関数コールアウトのパラメータとして使用できます。ただし、ファイルのオープンおよびクローズは、同じネスト・レベルにある、同じプログラム・ブロックから行うことをお薦めします。 -
オブジェクトをデータベースにフラッシュする前に
BFILE
値を設定します。オブジェクトにBFILE
が含まれる場合は、オブジェクトをデータベースにフラッシュする前にBFILE
値を設定し、新しい行を挿入する必要があります。つまり、OCIObjectNew()
とOCIObjectFlush()
の間にOCILobFileSetName()
をコールする必要があります。 -
BFILE
を挿入または更新する前に、ディレクトリ・オブジェクト名およびファイル名を指定します。
ディレクトリ・オブジェクト名とファイル名を指定せずに
BFILE
を挿入または更新すると、エラーになります。この規則は、INSERT文またはUPDATE文で
BFILE
に対してOCIバインド変数を使用するユーザーにも適用されます。OCIバインド変数は、挿入または更新の文を発行する前に、ディレクトリ・オブジェクト名とファイル名で初期化する必要があります。
-
挿入または更新する前に
BFILE
を初期化します。ノート:
OCISetAttr()
では、BFILE
ロケータをNULL
に設定できません。 -
BFILE
を持つ行を挿入または更新するためのSQLを使用する前に、BFILE
を次のいずれかに初期化する必要があります。-
NULL
(OCIバインド変数を使用している場合は不可) -
ディレクトリ・オブジェクト名とファイル名
-
-
パス名の指定のどこにも2つのピリオド(「..」)を含めることはできません。ファイル名の最初に2つのピリオドを使用することもできません。
11.7 BFILEデータを使用したLOBのロードについて
LOBにBFILE
のデータをロードできます。
関連項目:
BFILE
操作と各プログラム環境で提供されるAPIのリストは、表11-1を参照してください。
この章で説明するBFILE
機能の使用方法の詳細は、『Oracle Database JDBC開発者ガイド』を参照してください。
事前条件
このプロシージャをコールする前に、次の事前条件を満たしている必要があります。
-
ソース
BFILE
インスタンスが存在すること。 -
宛先のLOBインスタンスが存在すること。
使用上のノート
ノート:
LOADBLOBFROMFILE
およびLOADCLOBFROMFILE
プロシージャによって、このプロシージャの機能が実装されるため、バイナリ・データおよび文字データのロード機能が向上します。機能が向上したプロシージャは、PL/SQL環境でのみ使用できます。可能なかぎり、機能が向上したプロシージャを使用することをお薦めします。
文字セットの変換
OCI、またはOCI機能にアクセスする任意のプログラム環境を使用すると、文字セット間を翻訳するとき、文字セット変換が暗黙的に実行されます。
BFILEからCLOBまたはNCLOBへのロード: バイナリ・データから文字セットへの変換
DBMS_LOB.LOADFROMFILE
プロシージャを使用してCLOB
またはNCLOB
に移入する場合は、BFILE
のバイナリ・データをLOBに移入することになります。バイナリ・データから文字セットへは、暗黙的な翻訳は実行されません。このため、テキストをロードする場合はLOADCLOBFROMFILE
プロシージャを使用する必要があります。
関連項目:
-
文字セット変換の問題点は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
量パラメータ
量パラメータには、次の注意事項があります。
-
DBMS_LOB.LOADFROMFILE
BFILE
全体をロードする場合は、DBMS_LOB.LOBMAXSIZE
定数を渡すことができます。他の値を渡す場合、値はBFILE
のサイズ以下である必要があります。 -
OCILobLoadFromFile()
BFILE
全体をロードする場合は、UB4MAXVAL
定数を渡すことができます。他の値を渡す場合、値はBFILE
のサイズ以下である必要があります。 -
OCILobLoadFromFile2()
BFILE
全体をロードする場合は、UB8MAXVAL
定数を渡すことができます。他の値を渡す場合、値はBFILE
のサイズ以下である必要があります。関連項目:
量パラメータの最大値の詳細は、表12-2を参照してください。
構文
各プログラム環境における構文については、次のマニュアルの項を参照してください。
-
PL/SQL (DBMS_LOB): 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』の「DBMS_LOB」のLOADFROMFILEに関する項
-
C (OCI): 『Oracle Call Interfaceプログラマーズ・ガイド』: 使用上のノートと例については、第7章「LOBとFILEの操作」。第16章、LOB関数の
OCILobLoadFromFile2()
に関する項。 -
COBOL (Pro*COBOL): 『Pro*COBOLプログラマーズ・ガイド』のLOBの詳細、LOB文の使用上のノート、およびLOB LOAD (実行可能埋込みSQL拡張)。
-
C/C++ (Pro*C/C++) (『Pro*C/C++プログラマーズ・ガイド』)の「ラージ・オブジェクト(LOB)」、「LOB文」および「埋込みSQL文およびディレクティブ」の「LOB LOAD」
-
Java (JDBC): 『Oracle Database JDBC開発者ガイド』の「LOBとBFILEの操作」のBFILEの操作に関する項。
例
次のプログラム環境での例を示します。
-
PL/SQL(DBMS_LOB):
floaddat.sql
-
OCI:
floaddat.c
-
Java(JDBC): 例は提供されません。
11.8 OPENを使用したBFILEのオープンについて
OPENファンクションを使用してBFILE
をオープンできます。
ノート:
BFILE
をオープンするには、FILEOPEN
ファンクションを使用する方法もありますが、新規に開発する場合にはOPEN
ファンクションを使用することをお薦めします。
関連項目:
-
FILEOPEN
ファンクションの詳細は、「FILEOPENを使用したBFILEのオープンについて」を参照してください。 -
BFILE
操作と各プログラム環境で提供されるAPIのリストは、表11-1を参照してください。
構文
各プログラム環境における構文については、次のマニュアルの項を参照してください。
-
PL/SQL(DBMS_LOB): 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』の「DBMS_LOB」の「OPEN」
-
C (OCI) (『Oracle Call Interfaceプログラマーズ・ガイド』): 使用上のノートについては、第7章「LOBとBFILEの操作」。第16章、LOB関数の
OCILobOpen()
、OCILobClose()
に関する項。 -
COBOL (Pro*COBOL): 『Pro*COBOLプログラマーズ・ガイド』のLOBの詳細、LOB文の使用上のノート、およびLOB OPEN実行可能埋込みSQL拡張。
-
C/C++(Pro*C/C++): 『Pro*C/C++プログラマーズ・ガイド』の「ラージ・オブジェクト(LOB)」、「LOB文」および「埋込みSQL文およびディレクティブ」の「LOB OPEN」
-
Java (JDBC): 『Oracle Database JDBC開発者ガイド』の「LOBとBFILEの操作」のBFILEの操作に関する項。
使用例
次の例では、オペレーティング・システム・ファイルADPHOTO_DIR
のイメージをオープンします。
例
次のプログラム環境での例を示します。
-
PL/SQL (DBMS_LOB):
fopen.sql
-
OCI:
fopen.c
-
Java (JDBC):
fopen.java
11.9 FILEOPENを使用したBFILEのオープンについて
FILEOPEN
ファンクションを使用してBFILE
をオープンできます。
ノート:
新規アプリケーション開発には、FILEOPEN
ファンクションをお薦めしません。OPEN
ファンクションを使用することをお薦めします。
関連項目:
-
BFILE
操作と各プログラム環境で提供されるAPIのリストは、表11-1を参照してください。
BFILEオープン時の使用上のノート
従来のFILEOPEN
フォームも引き続き使用できますが、今後の拡張が容易になるため、OPEN
に切り替えることをお薦めします。
構文
各プログラム環境における構文については、次のマニュアルの項を参照してください。
-
PL/SQL (DBMS_LOB): 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』の「DBMS_LOB」、FILEOPENおよびFILECLOSEに関する項
-
C (OCI) (『Oracle Call Interfaceプログラマーズ・ガイド』): 使用上のノートについては、第7章「LOBとBFILEの操作」。第16章、LOB関数の
OCILobFileOpen()
、OCILobFileClose()
、OCILobFileSetName()
に関する項。 -
COBOL(Pro*COBOL): 参照マニュアルはありません。
-
C/C++(Pro*C/C++): 参照マニュアルはありません。
-
Java (JDBC): 『Oracle Database JDBC開発者ガイド』の「LOBとBFILEの操作」のBFILEの操作に関する項。
BFILEのオープンの使用例
これらの例では、ディレクトリ・オブジェクト
MEDIA_DIR
でkeyboard_logo.jpg
を開きます。
例
次のプログラム環境での例を示します。
-
PL/SQL(DBMS_LOB):
ffilopen.sql
-
OCI:
ffilopen.c
-
Java (JDBC):
ffilopen.java
11.10 ISOPENを使用した、BFILEがオープンしているかどうかの確認について
ISOPEN
を使用して、BFILE
がオープンしているかどうかを確認できます。
ノート:
新規アプリケーション開発には、このファンクション(ISOPEN
)をお薦めします。新規開発には、古いFILEISOPEN
ファンクションをお薦めしません。
関連項目:
-
BFILE
操作と各プログラム環境で提供されるAPIのリストは、表11-1を参照してください。
構文
各プログラム環境における構文については、次のマニュアルの項を参照してください。
-
PL/SQL (DBMS_LOB): 『PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』の「DBMS_LOB」のISOPENに関する項
-
C (OCI): 『Oracle Call Interfaceプログラマーズ・ガイド』の第7章「LOBとBFILEの操作」の使用上のノートに関する項。第16章、LOB関数の
OCILobFileIsOpen()
に関する項。 -
COBOL (Pro*COBOL): 『Pro*COBOLプログラマーズ・ガイド』のLOBの詳細、LOB文の使用上のノート、およびLOB DESCRIBE実行可能埋込みSQL拡張。
-
C/C++ (Pro*C/C++): 『Pro*C/C++プログラマーズ・ガイド』の「ラージ・オブジェクト(LOB)」、「LOB文」、および「埋込みSQL文およびディレクティブ」のLOB DESCRIBEに関する項
-
Java (JDBC): 『Oracle Database JDBC開発者ガイド』の「LOBとBFILEの操作」のBFILEの操作に関する項。
例
次のプログラム環境での例を示します。
-
PL/SQL(DBMS_LOB):
fisopen.sql
-
OCI:
fisopen.c
-
Java (JDBC):
fisopen.java
11.11 FILEISOPENを使用した、BFILEがオープンしているかどうかの確認について
FILEISOPEN
ファンクションを使用して、BFILE
がOPEN
であるかどうかを確認できます。
ノート:
新規アプリケーション開発には、FILEISOPEN
ファンクションをお薦めしません。ISOPEN
ファンクションを使用することをお薦めします。
関連項目:
-
BFILE
操作と各プログラム環境で提供されるAPIのリストは、表11-1を参照してください。
使用上のノート
従来のFILEISOPEN
フォームも引き続き使用できますが、今後の拡張が容易になるため、ISOPEN
に切り替えることをお薦めします。
構文
各プログラム環境における構文については、次のマニュアルの項を参照してください。
-
PL/SQL (DBMS_LOB): 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』の「DBMS_LOB」のFILEISOPENに関する項
-
C (OCI): 『Oracle Call Interfaceプログラマーズ・ガイド』の第7章「LOBとBFILEの操作」の使用上のノートに関する項。第16章、LOB関数の
OCILobFileIsOpen()
に関する項。 -
COBOL(Pro*COBOL): 参照マニュアルはありません。
-
C/C++(Pro*C/C++): 参照マニュアルはありません。
-
Java (JDBC): 『Oracle Database JDBC開発者ガイド』の「LOBとBFILEの操作」のBFILEの操作に関する項。
シナリオ
次の例では、ad_graphic
に対応付けられているBFILE
がオープンしているかどうかを問い合せます。
例
次のプログラム環境での例を示します。
-
PL/SQL (DBMS_LOB):
ffisopen.sql
-
OCI:
ffisopen.c
-
Java (JDBC):
ffisopen.java
11.12 BFILEデータの表示について
BFILE
データは、プログラム環境によって異なる様々な操作を使用して表示できます。
関連項目:
BFILE
操作と各プログラム環境で提供されるAPIのリストは、表11-1を参照してください。
構文
各プログラム環境における構文については、次のマニュアルの項を参照してください。
-
PL/SQL (DBMS_LOB): 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』の「DBMS_LOB」のREADに関する項。第29章「DBMS_OUTPUT」の「PUT_LINE」
-
C (OCI): 『Oracle Call Interfaceプログラマーズ・ガイド』の第7章「LOBとBFILEの操作」の使用上のノートに関する項。第16章、LOB関数の
OCILobFileOpen()
、OCILobRead2()
に関する項。 -
COBOL (Pro*COBOL): 『Pro*COBOLプログラマーズ・ガイド』のLOBの詳細、LOB文の使用上のノート、およびLOB READ実行可能埋込みSQL拡張。
-
C/C++ (Pro*C/C++) (『Pro*C/C++プログラマーズ・ガイド』): 「ラージ・オブジェクト(LOB)」および「LOB文」の「READ」
-
Java (JDBC): 『Oracle Database JDBC開発者ガイド』の第7章「LOBとBFILEの操作」のBFILEの操作に関する項。
例
次のプログラム環境での例を示します。
-
PL/SQL(DBMS_LOB):
fdisplay.sql
-
OCI:
fdisplay.c
-
Java (JDBC):
fdisplay.java
11.13 BFILEからのデータの読取りについて
BFILE
からデータを読み取ることができます。
関連項目:
BFILE
操作と各プログラム環境で提供されるAPIのリストは、表11-1を参照してください。
使用上のノート
この操作を使用する場合は、次のことに注意してください。
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
パラメータを必ずチェックしてください。
量パラメータ
-
DBMS_LOB.READ
をコールするとき、量パラメータをデータのサイズより大きくすることはできますが、量パラメータはバッファのサイズ以下にする必要があります。PL/SQLで、バッファサイズの上限は32Kです。 -
BFILE
の終わりまで読み取る場合は、OCILobRead2()
のコール時にbyte_amt
パラメータに値0 (ゼロ)を渡すことができます。
構文
各プログラム環境における構文については、次のマニュアルの項を参照してください。
-
PL/SQL (DBMS_LOB): 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』の「DBMS_LOB」のREADに関する項
-
C (OCI): 『Oracle Call Interfaceプログラマーズ・ガイド』の第7章「LOBとBFILEの操作」の使用上のノートに関する項。第16章、LOB関数の
OCILobRead2()
に関する項。 -
COBOL (Pro*COBOL): 『Pro*COBOLプログラマーズ・ガイド』のLOBの詳細、LOB文の使用上のノート、およびLOB READ実行可能埋込みSQL拡張。
-
C/C++(Pro*C/C++): 『Pro*C/C++プログラマーズ・ガイド』の「ラージ・オブジェクト(LOB)」、「LOB文」および「埋込みSQL文およびディレクティブ」の「LOB READ」
-
Java (JDBC): 『Oracle Database JDBC開発者ガイド』の第7章「LOBとBFILEの操作」のBFILEの操作に関する項。
例
次のプログラム環境での例を示します。
-
PL/SQL(DBMS_LOB):
fread.sql
-
OCI:
fread.c
-
Java (JDBC):
fread.java
11.14 SUBSTRを使用した、BFILEデータの一部の読取りについて
SUBSTR
を使用してBFILE
データの一部を読み取ることができます。
関連項目:
BFILE
操作と各プログラム環境で提供されるAPIのリストは、表11-1を参照してください。
構文
各プログラム環境における構文については、次のマニュアルの項を参照してください。
-
PL/SQL (DBMS_LOB): 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』の「DBMS_LOB」のSUBSTRに関する項
-
OCI: 参照マニュアルはありません。
-
COBOL (Pro*COBOL): 『Pro*COBOLプログラマーズ・ガイド』のLOBの詳細、LOB文の使用上のノート、およびLOB CLOSE実行可能埋込みSQL拡張。
-
C/C++(Pro*C/C++): 『Pro*C/C++プログラマーズ・ガイド』の「ラージ・オブジェクト(LOB)」、「LOB文」および「埋込みSQL文およびディレクティブ」の「LOB OPEN」
-
Java (JDBC): 『Oracle Database JDBC開発者ガイド』の第7章「LOBとBFILEの操作」のBFILEの操作に関する項。
例
次のプログラム環境での例を示します。
-
PL/SQL(DBMS_LOB):
freadprt.sql
-
C(OCI): 今回のリリースでは例は提供されません。
-
Java (JDBC):
freadprt.java
11.15 2つのBFILEの全体または一部の比較
2つのBFILE
の全体または一部を比較できます。
関連項目:
BFILE
操作と各プログラム環境で提供されるAPIのリストは、表11-1を参照してください。
構文
各プログラム環境における構文については、次のマニュアルの項を参照してください。
-
PL/SQL (DBMS_LOB): 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』の「DBMS_LOB」のCOMPAREに関する項
-
C(OCI): 参照マニュアルはありません。
-
COBOL (Pro*COBOL): 『Pro*COBOLプログラマーズ・ガイド』のLOBの詳細、LOB文の使用上のノート、およびLOB OPEN実行可能埋込みSQL拡張。
-
C/C++(Pro*C/C++): 『Pro*C/C++プログラマーズ・ガイド』の「ラージ・オブジェクト(LOB)」、「LOB文」および「埋込みSQL文およびディレクティブ」の「LOB OPEN」
-
Java (JDBC): 『Oracle Database JDBC開発者ガイド』の「LOBとBFILEの操作」のBFILEの操作に関する項。
例
次のプログラム環境での例を示します。
-
PL/SQL (DBMS_LOB):
fcompare.sql
-
OCI: 今回のリリースでは例は提供されません。
-
Java (JDBC):
fcompare.java
11.16 INSTRを使用した、BFILEにパターンが存在するかどうかの確認
INSTR
操作を使用して、BFILE
にパターンが存在するかどうかを確認できます。
関連項目:
BFILE
操作と各プログラム環境で提供されるAPIのリストは、表11-1を参照してください。
構文
各プログラム環境における構文については、次のマニュアルの項を参照してください。
-
PL/SQL (DBMS_LOB): 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』の「DBMS_LOB」のINSTRに関する項
-
C(OCI): 参照マニュアルはありません。
-
COBOL (Pro*COBOL): 『Pro*COBOLプログラマーズ・ガイド』のLOBの詳細、LOB文の使用上のノート、およびLOB OPEN実行可能埋込みSQL拡張。
-
C/C++(Pro*C/C++): 『Pro*C/C++プログラマーズ・ガイド』の「ラージ・オブジェクト(LOB)」、「LOB文」および「埋込みSQL文およびディレクティブ」の「LOB OPEN」
-
Java (JDBC): 『Oracle Database JDBC開発者ガイド』の「LOBとBFILEの操作」のBFILEの操作に関する項。
例
次のプログラム環境での例を示します。
-
PL/SQL(DBMS_LOB):
fpattern.sql
-
OCI: 今回のリリースでは例は提供されません。
-
Java (JDBC):
fpattern.java
11.17 BFILEが存在するかどうかの確認
このプロシージャでは、BFILE
ロケータが有効なBFILE
インスタンスを指しているかどうかを確認します。
関連項目:
BFILE
操作と各プログラム環境で提供されるAPIのリストは、表11-1を参照してください。
構文
各プログラム環境における構文については、次のマニュアルの項を参照してください。
-
PL/SQL (DBMS_LOB): 『PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』の「DBMS_LOB」のFILEEXISTSに関する項
-
C (OCI) (『Oracle Call Interfaceプログラマーズ・ガイド』): 使用上のノートについては第7章「LOBとBFILEの操作」。第16章、LOB関数の
OCILobFileExists()
に関する項。 -
COBOL (Pro*COBOL): 『Pro*COBOLプログラマーズ・ガイド』のLOBの詳細、LOB文の使用上のノート、およびLOB DESCRIBE実行可能埋込みSQL拡張。
-
C/C++(Pro*C/C++) (『Pro*C/C++プログラマーズ・ガイド』): 「ラージ・オブジェクト(LOB)」、「LOB文」および「埋込みSQL文およびディレクティブ」のLOB DESCRIBEに関する説明。
-
Java (JDBC): 『Oracle Database JDBC開発者ガイド』の「LOBとBFILEの操作」のBFILEの操作に関する項。
例
次のプログラム環境での例を示します。
-
PL/SQL(DBMS_LOB):
fexists.sql
-
OCI:
fexists.c
-
Java (JDBC):
fexists.java
11.18 BFILEの長さの取得
BFILE
の長さを取得できます。
関連項目:
BFILE
操作と各プログラム環境で提供されるAPIのリストは、表11-1を参照してください。
構文
各プログラム環境における構文については、次のマニュアルの項を参照してください。
-
PL/SQL (DBMS_LOB): 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』の「DBMS_LOB」のGETLENGTHに関する項
-
C (OCI) (『Oracle Call Interfaceプログラマーズ・ガイド』): 第7章「LOBとBFILEの操作」。第16章、LOB関数の
OCILobGetLength2()
に関する項。 -
COBOL (Pro*COBOL): 『Pro*COBOLプログラマーズ・ガイド』のLOBの詳細、LOB文の使用上のノート、およびLOB DESCRIBE実行可能埋込みSQL拡張。
-
C/C++(Pro*C/C++) (『Pro*C/C++プログラマーズ・ガイド』): 「ラージ・オブジェクト(LOB)」、「LOB文」および「埋込みSQL文およびディレクティブ」のLOB DESCRIBEに関する説明
-
Java (JDBC): 『Oracle Database JDBC開発者ガイド』の「LOBとBFILEの操作」のBFILEの操作に関する項。
例
次のプログラム環境での例を示します。
-
PL/SQL(DBMS_LOB):
flength.sql
-
OCI:
flength.c
-
Java (JDBC):
flength.java
11.19 BFILEロケータの割当てについて
1つのBFILE
ロケータを別のロケータに割り当てることができます。
関連項目:
BFILE
操作と各プログラム環境で提供されるAPIのリストは、表11-1を参照してください。
構文
各プログラム環境における構文については、次のマニュアルの項を参照してください。
-
SQL: 『Oracle Database SQL言語リファレンス』の第7章「SQL文」のCREATE PROCEDUREに関する項
-
PL/SQL (DBMS_LOB): LOBロケータを他のLOBロケータに割り当てる方法は、「高度な設計時の考慮事項」を参照してください。
-
C (OCI): 『Oracle Call Interfaceプログラマーズ・ガイド』の第7章「LOBとBFILEの操作」の使用上のノートに関する項。第16章、LOB関数の
OCILobLocatorAssign()
に関する項。 -
COBOL (Pro*COBOL): 『Pro*COBOLプログラマーズ・ガイド』のLOBの詳細、LOB文の使用上のノート、およびLOB ASSIGN実行可能埋込みSQL拡張。
-
C/C++(Pro*C/C++): 『Pro*C/C++プログラマーズ・ガイド』の「ラージ・オブジェクト(LOB)」、「LOB文」および「埋込みSQL文およびディレクティブ」の「LOB ASSIGN」
-
Java (JDBC): 『Oracle Database JDBC開発者ガイド』の「LOBとBFILEの操作」のBFILEの操作に関する項。
例
次のプログラム環境での例を示します。
-
PL/SQL(DBMS_LOB):
fcopyloc.sql
-
OCI:
fcopyloc.c
-
Java (JDBC):
fcopyloc.java
11.20 BFILEのディレクトリ・オブジェクト名とファイル名の取得
BFILE
のディレクトリ・オブジェクト名とファイル名を取得できます。
関連項目:
BFILE
操作と各プログラム環境で提供されるAPIのリストは、表11-1を参照してください。
構文
各プログラム環境における構文については、次のマニュアルの項を参照してください。
-
PL/SQL (DBMS_LOB): 『PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』の「DBMS_LOB」のFILEGETNAMEに関する項
-
C (OCI): 『Oracle Call Interfaceプログラマーズ・ガイド』の第7章「LOBとBFILEの操作」の使用上のノートに関する項。第16章、LOB関数の
OCILobFileGetName()
に関する項。 -
COBOL (Pro*COBOL): 『Pro*COBOLプログラマーズ・ガイド』のLOBの詳細、LOB文の使用上のノート、およびLOB DESCRIBE実行可能埋込みSQL拡張。
-
C/C++(Pro*C/C++): 『Pro*C/C++プログラマーズ・ガイド』の「ラージ・オブジェクト(LOB)」、「LOB文」および「埋込みSQL文およびディレクティブ」のLOB DESCRIBE ... GET DIRECTORY ...に関する説明
-
Java (JDBC): 『Oracle Database JDBC開発者ガイド』の「LOBとBFILEの操作」のBFILEの操作に関する項。
例
次のプログラム環境での、このプロシージャの例を示します。
-
PL/SQL(DBMS_LOB):
fgetdir.sql
-
OCI:
fgetdir.c
-
Java (JDBC):
fgetdir.java
11.21 初期化したBFILEロケータを使用したBFILEの更新について
BFILE
ロケータを初期化してBFILE
を更新できます。
関連項目:
BFILE
操作と各プログラム環境で提供されるAPIのリストは、表11-1を参照してください。
構文
各プログラム環境における構文については、次のマニュアルの項を参照してください。
-
PL/SQL (DBMS_LOB): 『Oracle Database SQL言語リファレンス』の第7章「SQL文」のUPDATEに関する項
-
C (OCI): 『Oracle Call Interfaceプログラマーズ・ガイド』の第7章「LOBとBFILEの操作」の使用上のノートに関する項。第16章、LOB関数の
OCILobFileSetName()
に関する項。 -
COBOL (Pro*COBOL): 『Pro*COBOLプログラマーズ・ガイド』のLOBの詳細、LOB文の使用上のノート、およびALLOCATE実行可能埋込みSQL拡張。SQL UPDATE文の詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』も参照してください。
-
C/C++(Pro*C/C++) (『Pro*C/C++プログラマーズ・ガイド』): 「ラージ・オブジェクト(LOB)」、「LOB文」、「埋込みSQL文およびディレクティブ」
-
Java (JDBC): 『Oracle Database JDBC開発者ガイド』の「LOBとBFILEの操作」のBFILEの操作に関する項。
例
-
PL/SQL(DBMS_LOB):
fupdate.sql
-
OCI:
fupdate.c
-
Java (JDBC):
fupdate.java
11.22 FILECLOSEを使用したBFILEのクローズ
FILECLOSE
を使用してBFILE
をクローズできます。
ノート:
新規開発には、このファンクション(FILECLOSE
)をお薦めしません。かわりにCLOSE
ファンクションを使用してください。
構文
各プログラム環境における構文については、次のマニュアルの項を参照してください。
-
PL/SQL(DBMS_LOB): 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』の「DBMS_LOB」の「FILEOPEN」および「FILECLOSE」
-
C (OCI): 『Oracle Call Interfaceプログラマーズ・ガイド』の第7章「LOBとBFILEの操作」の使用上のノートに関する項。第16章、LOB関数の
OCILobFileClose()
に関する項。 -
COBOL(Pro*COBOL): 参照マニュアルはありません。
-
C/C++(Pro*C/C++): 参照マニュアルはありません。
-
Java (JDBC): 『Oracle Database JDBC開発者ガイド』の「LOBとBFILEの操作」のBFILEの操作に関する項。
例
-
PL/SQL(DBMS_LOB):
fclose_f.sql
-
OCI:
fclose_f.c
-
Java(JDBC):
fclose_f.java
11.23 CLOSEを使用したBFILEのクローズ
CLOSE
ファンクションを使用してBFILE
をクローズできます。
ノート:
新規アプリケーション開発には、このファンクション(CLOSE
)をお薦めします。新規開発には、古いFILECLOSE
ファンクションをお薦めしません。
関連項目:
BFILE
操作と各プログラム環境で提供されるAPIのリストは、表11-1を参照してください。
使用上のノート
BFILE
のオープンとクローズは必須操作です。インスタンスはセッション中に後でクローズする必要があります。
構文
各プログラム環境における構文については、次のマニュアルの項を参照してください。
-
PL/SQL (DBMS_LOB): 『PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』の「DBMS_LOB」のCLOSEに関する項
-
C (OCI): 『Oracle Call Interfaceプログラマーズ・ガイド』の第7章「LOBとBFILEの操作」の使用上のノートに関する項。第16章、LOB関数の
OCILobClose()
に関する項。 -
COBOL (Pro*COBOL): 『Pro*COBOLプログラマーズ・ガイド』のLOBの詳細、LOB文の使用上のノート、およびLOB CLOSE実行可能埋込みSQL拡張
-
C/C++(Pro*C/C++): 『Pro*C/C++プログラマーズ・ガイド』の「ラージ・オブジェクト(LOB)」、「LOB文」および「埋込みSQL文およびディレクティブ」の「LOB CLOSE」
-
Java (JDBC): 『Oracle Database JDBC開発者ガイド』の「LOBとBFILEの操作」のBFILEの操作に関する項。
例
-
PL/SQL(DBMS_LOB):
fclose_c.sql
-
OCI:
fclose_c.c
-
Java(JDBC):
fclose_c.java
11.24 FILECLOSEALLを使用したオープン中のすべてのBFILEのクローズ
オープンしているBFILE
をすべてクローズできます。
BFILE
インスタンスは、プログラムの終了前にクローズする必要があります。たとえば、オープンしているBFILE
インスタンスはすべて、PL/SQLブロックやOCIプログラムの終了する前にクローズする必要があります。
アプリケーションに例外が発生したり異常終了した場合も、オープンしているBFILEインスタンスをクローズする必要があります。このような場合にBFILE
インスタンスをクローズしないと、データベースでオープン状態であるとみなされます。このような場合にBFILEインスタンスがオープン状態のままにならないような例外処理方法を使用していることを確認してください。
関連項目:
-
BFILE
操作と各プログラム環境で提供されるAPIのリストは、表11-1を参照してください。
構文
各プログラム環境における構文については、次のマニュアルの項を参照してください。
-
PL/SQL (DBMS_LOB): 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』の「DBMS_LOB」のFILECLOSEALLに関する項
-
C (OCI): 『Oracle Call Interfaceプログラマーズ・ガイド』の第7章「LOBとBFILEの操作」の使用上のノートに関する項。第16章、LOB関数の
OCILobFileCloseAll()
に関する項。 -
COBOL (Pro*COBOL): 『Pro*COBOLプログラマーズ・ガイド』のLOBの詳細、LOB文の使用上のノート、およびLOB FILE CLOSE ALL実行可能埋込みSQL拡張
-
C/C++(Pro*C/C++): 『Pro*C/C++プログラマーズ・ガイド』の「ラージ・オブジェクト(LOB)」、「LOB文」および「埋込みSQL文およびディレクティブ」のLOB FILE CLOSE ALLに関する説明
-
Java (JDBC): 『Oracle Database JDBC開発者ガイド』の第7章「LOBとBFILEの操作」のBFILEの操作に関する項。
例
-
PL/SQL(DBMS_LOB):
fclosea.sql
-
OCI:
fclosea.c
-
Java (JDBC):
fclosea.java
11.25 BFILEを含む行の挿入について
BFILE
ロケータを初期化してBFILE
を含む行を挿入できます。
関連項目:
-
BFILE
操作と各プログラム環境で提供されるAPIのリストは、表11-1を参照してください。
使用上のノート
INSERT
文を発行する前に、BFILE
ロケータ・バインド変数をNULL
またはディレクトリ・オブジェクトおよびファイル名に初期化する必要があります。
構文
各プログラム環境における構文については、次のマニュアルの項を参照してください。
-
SQL: 『Oracle Database SQL言語リファレンス』の第7章「SQL文」のINSERTに関する項
-
C (OCI) 『Oracle Call Interfaceプログラマーズ・ガイド』: 第7章「LOBとBFILEの操作」。
-
COBOL(Pro*COBOL): 『Pro*COBOLプログラマーズ・ガイド』のLOBの詳細、LOB文の使用上のノートおよび埋込みSQLおよびプリコンパイラ・ディレクティブ。『Oracle Database SQL言語リファレンス』のSQL INSERT文の関連情報も参照。
-
C/C++(Pro*C/C++): 『Pro*C/C++プログラマーズ・ガイド』の「ラージ・オブジェクト(LOB)」、「LOB文」および「埋込みSQL文およびディレクティブ」の「LOB FILE SET」。『Oracle Database SQL言語リファレンス』の第7章「SQL文」の「INSERT」も参照。
-
Java (JDBC): 『Oracle Database JDBC開発者ガイド』の「LOBとBFILEの操作」のBFILEの操作に関する項。
例
-
PL/SQL(DBMS_LOB):
finsert.sql
-
OCI:
finsert.c
-
Java (JDBC):
finsert.java