5.4 様々なプログラム・インタフェースでのBFILE API
この項では、Oracle Databaseでサポートされている様々なプログラム・インタフェースのすべてのAPIを示します。
ノート:
PL/SQLのDBMS_LOB
パッケージは、BFILE
に対する豊富な操作セットを提供します。これらの操作の一部が提供されていない別のプログラム・インタフェースを使用している場合は、対応するPL/SQLのDBMS_LOB
プロシージャまたは関数を呼び出します。
関連項目:
LOBインタフェースの比較- BFILE用のPL/SQL API
この項では、BFILEで使用できるPL/SQL APIについて説明します。 - BFILE用のJDBC API
この項では、BFILEの操作に使用できるJDBC APIについて説明します。 - BFILE用のOCI API
この項では、BFILEで使用できるOCI APIについて説明します。 - BFILE用のODP.NET API
この項では、BFILEで使用できるODP.NET APIについて説明します。 - BFILE用のOCCI API
この項では、BFILE
で使用できるOCCI APIについて説明します。 - BFILE用のPro*C/C++およびPro*COBOL API
この項では、BFILEに使用できるPro*C/C++およびPro*COBOL APIについて説明します。
親トピック: BFILE
5.4.1 BFILE用のPL/SQL API
この項では、BFILEで使用できるPL/SQL APIについて説明します。
関連項目:
DBMS_LOB表5-3 BFILE用のDBMS_LOB関数およびプロシージャ
分類 | 関数およびプロシージャ | 説明 |
---|---|---|
健全性チェック | FILEEXISTS |
サーバーにBFILE が存在するかどうかをチェック
|
FILEGETNAME |
DIRECTORY オブジェクト名とファイル名の取得
|
|
BFILENAME |
ディレクトリまたはファイルが存在するかどうかをチェックせずに、ロケータにBFILE の名前を設定
|
|
オープンとクローズ | OPEN、FILEOPEN |
ファイルをオープンします。FILEOPEN のかわりにOPEN を使用します。
|
ISOPEN、FILEISOPEN |
入力BFILE ロケータを使用してファイルがオープンされたかどうかをチェックします。FILEISOPEN のかわりにISOPEN を使用します。
|
|
CLOSE、FILECLOSE |
ファイルをクローズします。FILECLOSE のかわりにCLOSE を使用します。
|
|
FILECLOSEALL |
前にオープンされたファイルをすべてクローズします。 | |
読取り操作 | GETLENGTH |
BFILE の長さの取得 |
READ |
指定されたオフセットからBFILE のデータを読み取ります。
|
|
SUBSTR |
指定されたオフセットからBFILE 値の一部を返します。
|
|
INSTR |
BFILE にあるパターンのn番目に出現した一致位置を返します。
|
|
複数のロケータを含む操作 | := (演算子) | BFILE ロケータの別のロケータへの割当て
|
LOADCLOBFROMFILE |
文字データのファイルからLOBへのロード | |
LOADBLOBFROMFILE |
バイナリ・データのファイルからLOBへのロード | |
LOADFROMFILE |
BFILE データをLOBにロード(非推奨)
|
|
COMPARE |
2つのBFILE の値を比較します。
|
例5-3 BFILE用のPL/SQL API
declare
f BFILE;
f2 BFILE;
b BLOB;
c CLOB;
dest_offset NUMBER;
src_offset NUMBER;
lang NUMBER;
warn NUMBER;
buffer RAW(128);
amt NUMBER;
len NUMBER;
pos NUMBER;
filename VARCHAR2(128);
dirname VARCHAR2(128);
BEGIN
/* Select out a BFILE locator */
SELECT ad_graphic INTO f FROM print_media WHERE product_id = 1 AND ad_id = 1;
/*------------------------------------------------------------------*/
/*---------------------- Sanity Checking ---------------------------*/
/*------------------------------------------------------------------*/
/*-------------- Determining Whether a BFILE Exists ----------------*/
if DBMS_LOB.FILEEXISTS(f) = 1 then
DBMS_OUTPUT.PUT_LINE('F exists!');
else
DBMS_OUTPUT.PUT_LINE('F does not exist :(');
return;
end if;
/*------ Getting Directory Object Name and File Name of a BFILE ----*/
DBMS_LOB.FILEGETNAME(f, dirname, filename);
DBMS_OUTPUT.PUT_LINE('F: directory: '|| dirname ||' filename: '|| filename);
/*------------------------------------------------------------------*/
/*----------------------- Open/Close -------------------------------*/
/*------------------------------------------------------------------*/
/*----------------------- Opening a BFILE --------------------------*/
DBMS_LOB.OPEN(f, DBMS_LOB.LOB_READONLY);
/*-------------- Determining Whether a BFILE Is Open ---------------*/
if DBMS_LOB.ISOPEN(f) = 1 then
DBMS_OUTPUT.PUT_LINE('F is open!');
else
DBMS_OUTPUT.PUT_LINE('F is not open :(');
end if;
/*----------------------- Closing a BFILE --------------------------*/
DBMS_LOB.CLOSE(f);
/*------------ Closing All Open BFILEs with FILECLOSEALL -----------*/
DBMS_LOB.FILECLOSEALL;
/*------------------------------------------------------------------*/
/*-------------------- BFILE operations ----------------------------*/
/*------------------------------------------------------------------*/
DBMS_LOB.OPEN(f, dbms_lob.lob_readonly);
/*----------------- Getting the Length of a BFILE ------------------*/
len := DBMS_LOB.GETLENGTH(f);
DBMS_OUTPUT.PUT_LINE('dbms_lob.getlength: '||len);
/*------------------------ Reading BFILE Data ----------------------*/
amt := 15;
DBMS_LOB.READ(f, amt, 1, buffer);
DBMS_OUTPUT.PUT_LINE('dbms_lob.read: '||UTL_RAW.CAST_TO_VARCHAR2(buffer));
/*--------- Reading a Portion of BFILE Data Using SUBSTR -----------*/
buffer := DBMS_LOB.SUBSTR(f, 15, 3);
DBMS_OUTPUT.PUT_LINE('dbms_lob.substr: '||UTL_RAW.CAST_TO_VARCHAR2(buffer));
/*------ Checking If a Pattern Exists in a BFILE Using INSTR -------*/
pos := DBMS_LOB.INSTR(f, utl_raw.cast_to_raw('BFILE'), 1, 1);
if pos != 0 then
DBMS_OUTPUT.PUT_LINE('dbms_lob.instr: "BFILE" word exists in position ' || pos);
else
DBMS_OUTPUT.PUT_LINE('dbms_lob.instr: "BFILE" word does not exist in file');
end if;
/*------------------------------------------------------------------*/
/*------------- Operations involving 2 locators ---------------------*/
/*------------------------------------------------------------------*/
/*----------------- Assigning a BFILE Locator ----------------------*/
f2 := f; -- where f2 is also a bfile variable
amt := 15;
DBMS_LOB.READ(f2, amt, 1, buffer);
DBMS_OUTPUT.PUT_LINE('assign: dbms_lob.read: '||UTL_RAW.CAST_TO_VARCHAR2(buffer));
/*--------------- Loading a LOB with BFILE Data --------------------*/
/* Select out BLOB and CLOB for update so we can write to them */
select ad_composite, ad_sourcetext into b, c
from print_media where product_id = 1 and ad_id = 1 for update;
/* Load BLOB from BFILE */
dest_offset := 1;
src_offset := 1;
DBMS_LOB.LOADBLOBFROMFILE(b, f, dbms_lob.lobmaxsize, dest_offset, src_offset);
/* Load CLOB from BFILE, for this operation is necessary to know the charset
* id of BFILE to read it correctly */
dest_offset := 1;
src_offset := 1;
lang := 0;
/* Specifying the amount as DBMS_LOB.LOBMAXSIZE to copy till end of file */
DBMS_LOB.LOADCLOBFROMFILE(c, f, DBMS_LOB.LOBMAXSIZE, dest_offset, src_offset,
NLS_CHARSET_ID('utf8'), lang, warn);
/*-------------- Comparing All or Parts of Two BFILES -------------*/
SELECT ad_graphic INTO f2 FROM print_media WHERE product_id = 2 AND ad_id = 1;
DBMS_LOB.OPEN(f2, dbms_lob.lob_readonly);
if DBMS_LOB.COMPARE(f, f2, 10, 1, 1) = 0 then
DBMS_OUTPUT.PUT_LINE('dbms_lob.compare: They are equals!!');
else
DBMS_OUTPUT.PUT_LINE('dbms_lob.compare: They are not equals :(');
end if;
-- Close just f
DBMS_LOB.CLOSE(f);
-- Close the rest of bfiles opended
DBMS_LOB.FILECLOSEALL;
END;
/
親トピック: 様々なプログラム・インタフェースでのBFILE API
5.4.2 BFILE用のJDBC API
この項では、BFILEの操作に使用できるJDBC APIについて説明します。
JDBCでは、oracle.jdbc.OracleBfile
インタフェースは、データベース内のBFILE
データに対して操作を実行するためのメソッドを提供します。これはBFILE
ロケータをカプセル化するため、ロケータは処理せず、かわりに操作を実行して状態情報を取得するために提供されるメソッドおよびプロパティを使用します。
最新の行のロケータを取り出すには、移動操作が行われるたびに、インスタンスがBFILE
かどうかに応じて、OracleResultSet
でgetBFILE()
メソッドをコールする必要があります。
関連項目:
LOBとBFILEの操作表5-4 BFILE用のJDBC API
分類 | 関数およびプロシージャ | 説明 |
---|---|---|
健全性チェック | boolean fileExists() |
サーバーにBFILE が存在するかどうかをチェック
|
public java.lang.String getName() |
ファイル名の取得 | |
public java.lang.String getDirAlias() |
DIRECTORY オブジェクト名の取得
|
|
オープンとクローズ | public void openFile() |
ファイルをオープンします。 |
public boolean isFileOpen() |
入力BFILE ロケータを使用してファイルがオープンされたかどうかをチェックします。
|
|
public void closeFile() |
ファイルをクローズします。FILECLOSE のかわりにCLOSE を使用します。
|
|
読取り操作 | long length() |
BFILE の長さの取得 |
public java.io.InputStream getBinaryStream() |
BFILE をバイナリ・ストリームとして読み取ります。
|
|
byte[] getBytes(long, int) |
オフセットを指定して、バイトの配列としてBFILE の内容を取得
|
|
int getBytes(long, int, byte[]) |
BFILE のサブセットをバイト配列に読み取ります。
|
|
long position(oracle.jdbc.OracleBfile, long) |
指定されたオフセットから、LOB内の指定されたBFILE の内容の1番目のものを検索します。
|
|
long position(byte[],long) |
指定されたオフセットから、BFILE 内の指定されたバイト配列の1番目のものを検索します。
|
|
複数のロケータを含む操作 | [等号を使用] | BFILE ロケータの別のロケータへの割当て
|
例5-4 BFILE用のJDBC API
static void run_query() throws Exception {
try(
OracleConnection con = getConnection();
Statement stmt = con.createStatement();
){
ResultSet rs = null;
OracleBfile f = null;
OracleBfile f2 = null;
OracleBfile f3 = null;
InputStream in = null;
String output = null;
byte buffer[] = new byte[15];
long pos;
String filename = null;
String dirname = null;
long len = 0;
rs = stmt.executeQuery("select ad_graphic from print_media where product_id = 1");
rs.next();
f = (OracleBfile)((OracleResultSet)rs).getBfile(1);
rs.close();
rs = stmt.executeQuery("select ad_graphic from print_media where product_id = 2");
rs.next();
f2 = (OracleBfile)((OracleResultSet)rs).getBfile(1);
rs.close();
stmt.close();
/*------------------------------------------------------------------*/
/*---------------------- Sanity Checking ---------------------------*/
/*------------------------------------------------------------------*/
/*-------------- Determining Whether a BFILE Exists ----------------*/
if (f.fileExists())
System.out.println("F exists!");
else
System.out.println("F does not exist :(");
/*------ Getting Directory Object Name and File Name of a BFILE ----*/
dirname = f.getDirAlias();
filename = f.getName();
System.out.println("Directory: " + dirname + " Filename: " + filename);
/*------------------------------------------------------------------*/
/*----------------------- Open/Close -------------------------------*/
/*------------------------------------------------------------------*/
/*----------------------- Opening a BFILE --------------------------*/
f.open(LargeObjectAccessMode.MODE_READONLY);
/*-------------- Determining Whether a BFILE Is Open ---------------*/
if (f.isOpen())
System.out.println("F is open!");
else
System.out.println("F is not open :(");
/*----------------------- Closing a BFILE --------------------------*/
f.close();
/*------------------------------------------------------------------*/
/*-------------------- BFILE operations ----------------------------*/
/*------------------------------------------------------------------*/
f.open(LargeObjectAccessMode.MODE_READONLY);
/*----------------- Getting the Length of a BFILE ------------------*/
len = f.length();
System.out.println("F Length: "+len);
/*------------------------ Reading BFILE Data ----------------------*/
in = f.getBinaryStream();
in.read(buffer);
in.close();
output = new String(buffer);
System.out.println("Buffer: " + output);
/*---- Checking If a Pattern Exists in a BFILE Using POSITION ------*/
pos = f.position("BFILE".getBytes(), 1);
if (pos != -1)
System.out.println("\"BFILE\" word exists in position: " + pos);
else
System.out.println("\"BFILE\" word doesn't exist :( " );
/*------------------------------------------------------------------*/
/*------------- Operations involing 2 locators ---------------------*/
/*------------------------------------------------------------------*/
/*----------------- Assigning a BFILE Locator ----------------------*/
f3 = f;
in = f3.getBinaryStream();
in.read(buffer);
in.close();
output = new String(buffer);
System.out.println("assign: Buffer: " + output);
/*-------------- Comparing All or Parts of Two BFILES -------------*/
f2.open(LargeObjectAccessMode.MODE_READONLY);
pos = f.position(f2, 1);
if (pos != -1)
System.out.println("f2 exists in position " + pos);
else
System.out.println("f2 doesn't exist in position");
f.close();
f2.close();
f3.close();
}
}
親トピック: 様々なプログラム・インタフェースでのBFILE API
5.4.3 BFILE用のOCI API
この項では、BFILEで使用できるOCI APIについて説明します。
関連項目:
LOBおよびBFILEの操作表5-5 BFILE用のOCI API
分類 | 関数およびプロシージャ | 説明 |
---|---|---|
健全性チェック | OCILobFileExists() |
サーバーにBFILE が存在するかどうかをチェック
|
OCILobFileGetName() |
DIRECTORY オブジェクト名とファイル名の取得
|
|
OCILobFileSetName() |
ディレクトリまたはファイルが存在するかどうかをチェックせずに、ロケータにBFILE の名前を設定
|
|
OCILobLocatorIsInit() |
LOBロケータが初期化されているかどうかのチェック | |
オープンとクローズ | OCILobOpen()およびOCILobFileOpen() |
ファイルをオープンします。OCILobFileOpen() のかわりにOciLobOpen() を使用します。
|
OCILobIsOpen()およびOCILobFileIsOpen() |
入力BFILE ロケータを使用してファイルがオープンされたかどうかをチェックします。OciLobFileIsOpen() のかわりにOCILobIsOpen() を使用します。
|
|
OCILobClose()およびOCILobFileClose() |
ファイルをクローズします。OciLobFileClose() のかわりにOciLobClose() を使用します。
|
|
OCILobFileCloseAll() |
前にオープンされたファイルをすべてクローズします。 | |
読取り操作 | OCILobGetLength2() |
BFILE の長さの取得 |
OCILobRead2() |
指定されたオフセットからBFILE のデータを読み取ります。
|
|
OCILobArrayRead() |
1回のラウンドトリップで複数のロケータを使用してデータを読み取ります。 | |
複数のロケータを含む操作 | OCILobLocatorAssign() |
BFILE ロケータの別のロケータへの割当て
|
OCILobLoadFromFile2() |
BFILE データのファイルからLOBへのロード
|
例5-5 BFILE用のOCI API
static text *selstmt = (text *) "select ad_graphic, ad_composite, ad_sourcetext from print_media where product_id = 1 and ad_id = 1 for update"
sword run_query()
{
OCILobLocator *f = (OCILobLocator *)0;
OCILobLocator *f2 = (OCILobLocator *)0;
OCILobLocator *b = (OCILobLocator *)0;
OCILobLocator *c = (OCILobLocator *)0;
OCIStmt *stmthp;
OCIDefine *defn1p = (OCIDefine *) 0;
OCIDefine *defn2p = (OCIDefine *) 0;
OCIDefine *defn3p = (OCIDefine *) 0;
ub4 bfilelen;
ub1 lbuf[128];
ub8 amt = 15;
boolean flag = FALSE;
ub4 id = 10;
text filename[128];
ub2 filename_len;
text dirname[128];
ub2 dirname_len;
CHECK_ERROR (OCIHandleAlloc( (dvoid *) envhp, (dvoid **) &stmthp,
OCI_HTYPE_STMT, (size_t) 0, (dvoid **) 0));
/************** Allocate descriptors ***********************/
CHECK_ERROR (OCIDescriptorAlloc((dvoid *) envhp, (dvoid **) &f,
(ub4)OCI_DTYPE_FILE, (size_t) 0,
(dvoid **) 0));
CHECK_ERROR (OCIDescriptorAlloc((dvoid *) envhp, (dvoid **) &f2,
(ub4)OCI_DTYPE_FILE, (size_t) 0,
(dvoid **) 0));
CHECK_ERROR (OCIDescriptorAlloc((dvoid *) envhp, (dvoid **) &b,
(ub4)OCI_DTYPE_LOB, (size_t) 0,
(dvoid **) 0));
CHECK_ERROR (OCIDescriptorAlloc((dvoid *) envhp, (dvoid **) &c,
(ub4)OCI_DTYPE_LOB, (size_t) 0,
(dvoid **) 0));
/********** Execute selstmt to get f, b, c ***********************/
CHECK_ERROR (OCIStmtPrepare(stmthp, errhp, selstmt,
(ub4) strlen((char *) selstmt),
(ub4) OCI_NTV_SYNTAX, (ub4) OCI_DEFAULT));
CHECK_ERROR (OCIDefineByPos(stmthp, &defn1p, errhp, (ub4) 1, (dvoid *) &f,
(sb4) -1, SQLT_BFILE, (dvoid *) 0, (ub2 *) 0,
(ub2 *)0, (ub4) OCI_DEFAULT));
CHECK_ERROR (OCIDefineByPos(stmthp, &defn2p, errhp, (ub4) 2, (dvoid *) &b,
(sb4) -1, SQLT_BLOB, (dvoid *) 0, (ub2 *) 0,
(ub2 *)0, (ub4) OCI_DEFAULT));
CHECK_ERROR (OCIDefineByPos(stmthp, &defn3p, errhp, (ub4) 3, (dvoid *) &c,
(sb4) -1, SQLT_CLOB, (dvoid *) 0, (ub2 *) 0,
(ub2 *)0, (ub4) OCI_DEFAULT));
CHECK_ERROR (OCIStmtExecute(svchp, stmthp, errhp, (ub4) 1, (ub4) 0,
(CONST OCISnapshot *) NULL, (OCISnapshot *) NULL,
OCI_DEFAULT));
/*------------------------------------------------------------------*/
/*---------------------- Sanity Checking ---------------------------*/
/*------------------------------------------------------------------*/
/*-------------- Determining Whether a BFILE Exists ----------------*/
CHECK_ERROR (OCILobFileExists(svchp, errhp, f, &flag));
printf("OCILobFileExists: %s\n", (flag)?"TRUE":"FALSE");
/*------ Getting Directory Object Name and File Name of a BFILE ----*/
CHECK_ERROR (OCILobFileGetName(envhp, errhp, f, (text*)dirname, &dirname_len,
(text*)filename, &filename_len));
printf("OCILobFileGetName: Directory: %.*s Filaname: %.*s \n",
dirname_len, dirname, filename_len, filename);
/*------------------------------------------------------------------*/
/*----------------------- Open/Close -------------------------------*/
/*------------------------------------------------------------------*/
/*----------------------- Opening a BFILE --------------------------*/
CHECK_ERROR (OCILobFileOpen(svchp, errhp, f, OCI_FILE_READONLY));
printf("OCILobFileOpen: Works\n");
/*-------------- Determining Whether a BFILE Is Open ---------------*/
CHECK_ERROR (OCILobFileIsOpen(svchp, errhp, f, &flag));
printf("OCILobFileIsOpen: %s\n", (flag)?"TRUE":"FALSE");
/*----------------------- Closing a BFILE --------------------------*/
CHECK_ERROR (OCILobFileClose (svchp, errhp, f));
/*------------ Closing All Open BFILEs with FILECLOSEALL -----------*/
CHECK_ERROR (OCILobFileCloseAll(svchp, errhp));
/*------------------------------------------------------------------*/
/*-------------------- BFILE operations ----------------------------*/
/*------------------------------------------------------------------*/
CHECK_ERROR (OCILobFileOpen(svchp, errhp, f, OCI_FILE_READONLY));
printf("OCILobFileOpen: Works\n");
/*----------------- Getting the Length of a BFILE ------------------*/
CHECK_ERROR (OCILobGetLength(svchp, errhp, b, &bfilelen));
printf("OCILobGetLength: loblen: %d \n", bfilelen);
/*------------------------ Reading BFILE Data ----------------------*/
CHECK_ERROR (OCILobRead2(svchp, errhp, f, &amt,
NULL, (oraub8)1, lbuf,
(oraub8)sizeof(lbuf), OCI_ONE_PIECE ,(dvoid*)0,
NULL, (ub2)0, (ub1)SQLCS_IMPLICIT));
printf("OCILobRead2: buf: %.*s amt: %lu\n", amt, lbuf, amt);
/*------------------------------------------------------------------*/
/*------------- Operations involing 2 locators ---------------------*/
/*------------------------------------------------------------------*/
/*----------------- Assigning a BFILE Locator ----------------------*/
CHECK_ERROR (OCILobLocatorAssign(svchp, errhp, f, &f2));
printf("OCILobLocatorAssign: Works! \n");
amt = 15;
CHECK_ERROR (OCILobRead2(svchp, errhp, f2, &amt,
NULL, (oraub8)1, lbuf,
(oraub8)sizeof(lbuf), OCI_ONE_PIECE ,(dvoid*)0,
NULL, (ub2)0, (ub1)SQLCS_IMPLICIT));
printf("OCILobLocatorAssign: OCILobRead2: buf: %.*s amt: %lu\n", amt, lbuf, amt);
/*--------------- Loading a LOB with BFILE Data --------------------*/
/* Load BLOB from BFILE. Specify amount = UB8MAXVAL to copy till end of bfile */
CHECK_ERROR (OCILobLoadFromFile2(svchp, errhp, b, f, UB8MAXVAL, 1,1));
printf("OCILobLoadFromFile2: BLOB case Works\n");
/* Load CLOB from BFILE. Specify amount = UB8MAXVAL to copy till end of bfile.
* Note that there is no character set conversion here. */
CHECK_ERROR (OCILobLoadFromFile2(svchp, errhp, c, f, UB8MAXVAL, 1,1));
printf("OCILobLoadFromFile2: CLOB case Works\n");
/* Close just f */
CHECK_ERROR (OCILobFileClose (svchp, errhp, f));
/* Close the rest of bfiles opened */
CHECK_ERROR (OCILobFileCloseAll(svchp, errhp));
OCIDescriptorFree((dvoid *) b, (ub4) SQLT_BLOB);
OCIDescriptorFree((dvoid *) c, (ub4) SQLT_CLOB);
OCIDescriptorFree((dvoid *) f, (ub4) SQLT_BFILE);
OCIDescriptorFree((dvoid *) f2, (ub4) SQLT_BFILE);
CHECK_ERROR (OCIHandleFree((dvoid *) stmthp, OCI_HTYPE_STMT));
}
親トピック: 様々なプログラム・インタフェースでのBFILE API
5.4.4 BFILE用ODP.NET API
この項では、BFILEで使用できるODP.NET APIについて説明します。
関連項目:
OracleBFileクラス表5-6 OracleBfileClassのODP.NETメソッド
分類 | 関数と説明 | 説明 |
---|---|---|
健全性チェック | FileExists |
サーバーにBFILEが存在するかどうかをチェック |
FileName |
ファイル名を設定または取得 | |
DirectoryName |
DIRECTORY オブジェクト名を設定または取得
|
|
オープンとクローズ | OpenFile |
ファイルをオープンします。FILEOPEN のかわりにOPEN を使用します。
|
IsOpen |
入力BFILEロケータを使用して、ファイルがオープンされたかどうかを確認します。FILEISOPEN のかわりにISOPEN を使用します。
|
|
CloseFile |
ファイルをクローズします。 | |
読取り操作 | Length |
BFILEの長さの取得 |
Value |
LOBデータ全体をCLOBの文字列およびBLOBのバイト配列として返す | |
Read |
指定されたオフセットからBFILEのデータを読み取ります。 | |
Search |
BFILEにあるパターンのn番目に出現した一致位置を返します。 | |
複数のロケータを含む操作 | Compare |
2つのBFILEの値の比較 |
IsEqual |
2つのLOBが同じLOBデータを指しているかどうかをチェック |
親トピック: 様々なプログラム・インタフェースでのBFILE API
5.4.5 BFILE用のOCCI API
この項では、BFILE
で使用できるOCCI APIについて説明します。
OCCIでは、Bfile
クラスを使用して、C++アプリケーションでBfile
オブジェクトをインスタンス化できます。この場合、Bfile
クラスのメソッド( setName()
メソッドなど)を使用して、データベースのBFILE
列内のBFILE
型のオブジェクトにオブジェクト・プロパティを関連付けるBfile
オブジェクトを初期化する必要があります。
関連項目:
BfileクラスOCCI LOB copy()メソッドの量パラメータ
Clob
およびBlob
にcopy()
メソッドを使用すると、BFILE
からデータをロードできます。このメソッドの量パラメータには、次のいずれかの値を渡すことができます。
-
データの一部をロードする場合は、
BFILE
のサイズよりも小さい量。 -
データ全体をロードする場合は、
BFILE
のサイズと等しい量。 -
BFILE
データをすべてロードする場合は、UB8MAXVAL
定数。
BFILE
のサイズより大きいサイズは指定できません。
OCCI read()操作の量パラメータ
Clob
、Blob
またはBfile
オブジェクトに対するread()
メソッドは、BFILE
からデータを読み取ります。量パラメータの次のいずれかの値を渡して、読み取るデータ量を指定できます。
-
データの一部をロードする場合は、
BFILE
のサイズよりも小さい量。 -
データ全体をロードする場合は、
BFILE
のサイズと等しい量。 -
ゼロ(
0
)からBFILE
の終わりまでストリーム・モードで読み取るのと等しい量
BFILE
のサイズより大きいサイズは指定できません。
表5-7 BFILE用のOCCIメソッド
分類 | 関数およびプロシージャ | 説明 |
---|---|---|
健全性チェック | fileExists() |
サーバーにBFILE が存在するかどうかをチェック
|
getFileName() |
ファイル名の取得 | |
getDirAlias() |
DIRECTORY オブジェクト名の取得
|
|
setName() |
ディレクトリまたはファイルが存在するかどうかをチェックせずに、ロケータにBFILE の名前を設定します。
|
|
isInitialized() |
BFILE が初期化されるかどうかを確認します。
|
|
オープンとクローズ | open() |
ファイルをオープンします。 |
isOpen() |
入力BFILEロケータを使用して、ファイルがオープンされたかどうかを確認します。 | |
close() |
ファイルをクローズします。 | |
読取り操作 | length() |
BFILE の長さの取得 |
read() |
指定されたオフセットからBFILE のデータを読み取ります。
|
|
複数のロケータを含む操作 | (演算子) = | BFILE ロケータを別のロケータに割り当てます。代入演算子(= )またはコピー・コンストラクタを使用します。
|
Blob.copy()またはClob.copy() |
BFILE データのLOBへのロード
|
親トピック: 様々なプログラム・インタフェースでのBFILE API
5.4.6 BFILE用のPro*C/C++およびPro*COBOL API
この項では、BFILE用に使用できるPro*C/C++およびPro*COBOL APIについて説明します。
表5-8 BFILE用のPro*C/C++およびPro*COBOL API
分類 | 関数およびプロシージャ | 説明 |
---|---|---|
健全性チェック | DESCRIBE[FILEEXISTS] |
サーバーにBFILE が存在するかどうかをチェック
|
DESCRIBE[DIRECTORY,FILENAME] |
ディレクトリ・オブジェクト名とファイル名を取得します。 | |
FILE SET |
ディレクトリまたはファイルが存在するかどうかをチェックせずに、ロケータにBFILE の名前を設定
|
|
オープンとクローズ | OPEN |
ファイルをオープンします。 |
DESCRIBE[ISOPEN] |
入力BFILE ロケータを使用してファイルがオープンされたかどうかをチェックします。
|
|
CLOSE |
ファイルをクローズします。 | |
FILE CLOSE ALL |
前にオープンされたファイルをすべてクローズします。 | |
読取り操作 | DESCRIBE[LENGTH] |
BFILE の長さの取得 |
READ |
指定されたオフセットからBFILE のデータを読み取ります。
|
|
複数のロケータを含む操作 | ASSIGN |
BFILE ロケータの別のロケータへの割当て
|
LOAD FROM FILE |
BFILE データをLOBにロードします。
|
親トピック: 様々なプログラム・インタフェースでのBFILE API