3.2 様々なプログラム・インタフェースでの一時LOB API
この項では、様々なプログラム・インタフェースでの一時LOB固有のAPIを示します。
- 一時LOB用のPL/SQL API
この項では、一時LOBと一緒に使用されるPL/SQL APIについて説明します。 - 一時LOB用のJDBC API
この項では、一時LOBと一緒に使用されるPL/SQL APIについて説明します。 - 一時LOB用のOCI API
この項では、一時LOBと一緒に使用されるOCI APIについて説明します。 - 一時LOB用のODP.NET API
この項では、一時LOBと一緒に使用されるODP.NET APIについて説明します。 - 一時LOB用のPro*C/C++およびPro*COBOL API
この項では、一時LOB用のPro*C/C++およびPro*COBOL APIについて説明します。
親トピック: 一時LOB
3.2.1 一時LOB用のPL/SQL API
この項では、一時LOBと一緒に使用されるPL/SQL APIについて説明します。
関連項目:
DBMS_LOB表3-1 一時LOB用のDBMS_LOB関数およびプロシージャ
関数およびプロシージャ | 説明 |
---|---|
CREATETEMPORARY |
一時LOBの作成 |
ISTEMPORARY |
LOBロケータが一時LOBを参照するかどうかを確認します。 |
FREETEMPORARY |
一時LOBを解放します。 |
例3-1 一時LOB用のPL/SQL API
DECLARE
blob1 BLOB;
clob1 CLOB;
clob2 CLOB;
nclob1 NCLOB;
BEGIN
-- create a temp LOB using CREATETEMPORARY and fill it with data
DBMS_LOB.CREATETEMPORARY(blob1,TRUE, DBMS_LOB.SESSION);
writeDataToLOB_proc(blob1);
-- create a temp LOB using SQL built-in function
SELECT substr(ad_sourcetext, 5) INTO clob1 FROM print_media WHERE product_id=1 AND ad_id=1;
-- create a temp LOB using a PLSQL built-in function
nclob1 := TO_NCLOB(clob1);
-- create a temp LOB using a PLSQL procedure. Assume foo creates a temp lob and it's parameter is IN/OUT
foo(clob2);
-- Other APIs
CALL_LOB_APIS(blob1, clob1, clob2, nclob1);
-- free temp LOBs
DBMS_LOB.FREETEMPORARY(blob1);
DBMS_LOB.FREETEMPORARY(clob1);
DBMS_LOB.FREETEMPORARY(clob2);
DBMS_LOB.FREETEMPORARY(nclob1);
END;
/
show errors;
親トピック: 様々なプログラム・インタフェースでの一時LOB API
3.2.2 一時LOB用のJDBC API
この項では、一時LOBと一緒に使用されるPL/SQL APIについて説明します。
関連項目:
LOBとBFILEの操作表3-2 一時LOB用のjdbc.sql.Clobおよびjava.sql.Blob API
メソッド | 説明 |
---|---|
createTemporary |
一時LOBを作成します。 |
isTemporary |
LOBロケータが一時LOBを参照するかどうかを確認します。 |
freeTemporary |
一時LOBを解放します。 |
例3-2 一時LOB用のJDBC API
public class listempc
{
public static void main (String args [])
throws Exception
{
Connection conn = LobDemoConnectionFactory.getConnection();
// SELECT TEMPORARY LOB USING SQL
Statement stmt = conn.createStatement ();
ResultSet rset = stmt.executeQuery
("SELECT SUBSTR(ad_sourcetext, 5) FROM Print_media WHERE product_id = 3106 AND ad_id = 1");
if (rset.next())
{
Clob clob = rset.getClob (1);
System.out.println("Is lob temporary: " + ((CLOB)clob).isTemporary());
call_other_apis_to_read_write_from_lob(clob);
clob.free();
}
stmt.close();
// CREATE TEMPORARY LOB VIA API
Clob clob = conn.createClob();
System.out.println( "Is clob temporary: " + ((oracle.jdbc.OracleClob)clob).isTemporary());
call_other_apis_to_read_write_from_lob(clob);
// ALWAYS FREE THE TEMPORARY LOB WHEN DONE WITH IT
clob.free();
conn.close();
}
}
親トピック: 様々なプログラム・インタフェースでの一時LOB API
3.2.3 一時LOB用のOCI API
この項では、一時LOBと一緒に使用されるOCI APIについて説明します。
関連項目:
LOBおよびBFILEの操作表3-3 一時LOB用のOCI API
関数およびプロシージャ | 説明 |
---|---|
OCILobCreateTemporary() |
一時LOBの作成 |
OCILobIsTemporary() |
LOBロケータが一時LOBを参照するかどうかを確認します。 |
OCILobFreeTemporary() |
一時LOBを解放します。 |
例3-3 一時LOB用のOCI API
void temp_lob_operations()
{
OCILobLocator *temp_clob1;
OCILobLocator *temp_clob2;
OCIStmt *stmhp = (OCIStmt *) 0;
OCIDefine *dfnhp1;
ub1 bufp[BUFLEN];
ub4 amtp = 0;
ub8 bamtp = 0;
ub8 camtp = 0;
ub2 retl1, rcode1;
sb4 ind_ptr1 = 0;
boolean istemp = FALSE;
char *sel_stmt = "SELECT SUBSTR(ad_sourcetext, 5) FROM Print_media WHERE product_id = 3106 AND ad_id = 1";
/* allocate lob descriptors */
checkerr(errhp, OCIDescriptorAlloc((dvoid *) envhp, (dvoid **) &temp_clob1,
(ub4) OCI_DTYPE_LOB, (size_t) 0,
(dvoid **) 0));
checkerr(errhp, OCIDescriptorAlloc((dvoid *) envhp, (dvoid **) &temp_clob2,
(ub4) OCI_DTYPE_LOB, (size_t) 0,
(dvoid **) 0));
/* statement handle */
checkerr(errhp, OCIHandleAlloc( (dvoid *)envhp, (dvoid **) &stmhp,
(ub4) OCI_HTYPE_STMT, (size_t) 0, (dvoid **) 0));
checkerr(errhp, OCIHandleAlloc( (dvoid *)stmhp, (dvoid **) &dfnhp1,
(ub4) OCI_HTYPE_DEFINE, (size_t) 0, (dvoid **) 0));
/*-------------------- SELECT TEMPORARY LOB USING SQL ------------------------*/
checkerr(errhp, OCIStmtPrepare(stmhp, errhp, (text *) sel_stmt,
(ub4) strlen(sel_stmt), OCI_NTV_SYNTAX, OCI_DEFAULT));
checkerr(errhp, OCIDefineByPos(stmhp, &dfnhp1, errhp, (ub4) 1, &temp_clob1,
(sb4) -1, SQLT_CLOB, &ind_ptr1, &retl1, &rcode1,
(ub4) OCI_DEFAULT));
checkerr(errhp, OCIStmtExecute(svchp, stmhp, errhp, (ub4) 0, (ub4) 0,
(OCISnapshot *) NULL, (OCISnapshot *) NULL, OCI_DEFAULT));
checkerr(errhp, OCIStmtFetch(stmhp, errhp, 1, OCI_FETCH_NEXT, OCI_DEFAULT));
checkerr(errhp, OCILobWriteAppend2(svchp, errhp, temp_clob1,
(oraub8 *)&bamtp, (oraub8 *) &camtp, bufp, (oraub8)BUFLEN,
OCI_ONE_PIECE, (dvoid*)0, (OCICallbackLobWrite2)0, (ub2)0,
(ub1)SQLCS_IMPLICIT));
/*-------------------- CREATE TEMPORARY LOB USING API ------------------------*/
checkerr(errhp, OCILobCreateTemporary(svchp, errhp, temp_clob2,
(ub2) 0, OCI_DEFAULT, OCI_TEMP_CLOB,
FALSE, OCI_DURATION_SESSION));
/* write into bufp */
strcpy((char *)bufp, (const char *)"Demo program for testing temp lobs");
bamtp = amtp = (ub4) strlen((char *)bufp);
/* write bufp contents to temp lob */
checkerr(errhp, OCILobWrite2(svchp, errhp, temp_clob2, &amtp, 1,
(dvoid *)bufp, (ub4)bamtp , OCI_ONE_PIECE, (dvoid *)0,
(OCICallbackLobWrite) 0, (ub2) 0, (ub1) SQLCS_IMPLICIT));
/*--------------------- ALWAYS FREE TEMPORARY LOBS -------------------------*/
checkerr(errhp, OCILobIsTemporary(envhp, errhp, temp_clob1, &istemp));
if (istemp)
checkerr(errhp, OCILobFreeTemporary(svchp, errhp, temp_clob1));
checkerr(errhp, OCILobIsTemporary(envhp, errhp, temp_clob2, &istemp));
if (istemp)
checkerr(errhp, OCILobFreeTemporary(svchp, errhp, temp_clob2));
/* Free lob descriptors */
checkerr(errhp, OCIDescriptorFree ((dvoid *)temp_clob1, (ub4) OCI_DTYPE_LOB));
checkerr(errhp, OCIDescriptorFree ((dvoid *)temp_clob2, (ub4) OCI_DTYPE_LOB));
}
親トピック: 様々なプログラム・インタフェースでの一時LOB API
3.2.4 一時LOB用のODP.NET API
この項では、一時LOBと一緒に使用されるODP.NET APIについて説明します。
関連項目:
一時LOB表3-4 OracleClobクラスおよびOracleBlobクラスでの一時LOB用のODP.NETメソッド
メソッド | 説明 |
---|---|
Add() |
一時LOBを作成します。 |
IsTemporary() |
LOBロケータが一時LOBを参照するかどうかを確認します。 |
Dispose() またはClose() |
一時LOBを解放します。 |
親トピック: 様々なプログラム・インタフェースでの一時LOB API
3.2.5 一時LOB用のPro*C/C++およびPro*COBOL API
この項では、一時LOB用のPro*C/C++およびPro*COBOL APIについて説明します。
表3-5 一時LOB用のPro*C/C++およびPro*COBOL API
文 | 説明 |
---|---|
CREATE TEMPORARY |
一時LOBの作成 |
DESCRIBE [ISTEMPORARY] |
LOBロケータが一時LOBを参照するかどうかを確認します。 |
FREE TEMPORARY |
一時LOBを解放します。 |
親トピック: 様々なプログラム・インタフェースでの一時LOB API