MLEでのラージ・オブジェクト(LOB)の使用
MLE JavaScriptドライバでのCLOB (キャラクタ・ラージ・オブジェクト)やBLOB (バイナリ・ラージ・オブジェクト)などのラージ・オブジェクトの処理は、node-oracledb
ドライバとは異なります。Node.jsストリーム・インタフェースを使用するかわりに、PL/SQLラッパー型を使用します。BLOBおよびCLOBのラッパー型は、それぞれOracleBlob
およびOracleClob
と呼ばれます。これらは、mle-js-plsqltypes
で定義されます。ほとんどのタイプはグローバル・スコープで公開され、モジュールをインポートせずに参照できます。
ノート:
一般的にLOBに属するとされるBFILE
はサポートされていません。
関連項目:
mle-js-plsqltypes
およびその他のJavaScript組込みモジュールの詳細は、サーバー側JavaScript APIのドキュメントを参照してください
トピック
LOBの書込み
例は、最終的に表に挿入されるCLOBを初期化し、それに書き込む方法を示しています。
例7-17 表へのCLOBの挿入
この例では、CLOBを表に挿入する方法を示します。この表には、主キーとして使用されるID列とCという名前のCLOB列の2つの列が定義されます。
CREATE TABLE mle_lob_example (
id NUMBER GENERATED ALWAYS AS IDENTITY,
CONSTRAINT pk_mle_blob_table PRIMARY KEY(id),
c CLOB
);
CREATE OR REPLACE PROCEDURE insert_clob
AS MLE LANGUAGE JAVASCRIPT
{{
//OracleClob is exposed in the global scope and does not require
//importing 'mle-js-plsqltypes', similar to how oracledb is available
let theClob = OracleClob.createTemporary(false);
theClob.open(OracleClob.LOB_READWRITE);
theClob.write(
1,
'This is a CLOB and it has been inserted by the MLE JavaScript SQL Driver'
);
const result = session.execute(
`INSERT INTO mle_lob_example(c) VALUES(:theCLOB)`,
{
theCLOB:{
type: oracledb.ORACLE_CLOB,
dir: oracledb.BIND_IN,
val: theCLOB
}
}
);
//it is best practice to close the handle to free memory
theCLOB.close();
}};
/
CLOBとBLOBは、mle-js-plsqltypes
で定義されています。最も一般的に使用される型は、グローバル・スコープで提供され、mle-js-plsqltypes
のインポートのレンダリングが不要になります。
最初のステップでは、キャッシュされていない一時LOBロケータを作成します。LOBが正常に初期化されると、読取りおよび書込み操作のためにオープンされます。文字列は、オフセット1
でCLOBに書き込まれます。この時点まで、LOBはメモリー内に存在します。session.execute()
をコールすると、CLOBが表に挿入されます。close()
メソッドをコールすると、CLOBがクローズされ、関連付けられたメモリーが解放されます。
親トピック: MLEでのラージ・オブジェクト(LOB)の使用
LOBの読取り
例を使用して、CLOBを選択した後、fetchInfo
プロパティを使用してCLOBの内容を文字列として読み取る方法を示します。
例7-18 LOBの読取り
CREATE OR REPLACE FUNCTION read_clob(
"p_id" NUMBER
) RETURN VARCHAR2
AS MLE LANGUAGE JAVASCRIPT
{{
const result = session.execute(
`SELECT c
FROM mle_lob_example
WHERE id = :id`,
{
id:{
type: oracledb.NUMBER,
dir: oracledb.BIND_IN,
val: p_id
}
},
{
fetchInfo:{
"C": {type: oracledb.STRING}
},
outFormat: oracledb.OBJECT
}
);
if (result.rows.length === 0){
throw new Error(`No data found for ID ${id}`);
} else {
for (let row of result.rows){
return row.C;
}
}
}};
/
ファンクションread_clob
は、パラメータとしてIDを受け取ります。これは、CLOBを含む行を識別するために、select文のWHERE
句でバインド変数として使用されます。session.execute()
を使用して渡されるfetchInfo
プロパティは、CLOBを文字列としてフェッチするようデータベースに指示します。
親トピック: MLEでのラージ・オブジェクト(LOB)の使用