如何通过Node.js向Oracle数据库插入CLOB数据?
问题描述
我有一张需要插入CLOB数据的Oracle表,其字段定义如下:
LOB ("DETAILS") STORE AS BASICFILE ( TABLESPACE "DEV_DATA" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION NOCACHE LOGGING STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)) ;
在Node.js中,我正在构建数据列表并通过函数插入数据库,代码如下:
const fs = require('fs'); var path = require("path"); let con = await getConnection(); let str = fs.readFileSync(path.resolve(__dirname, './sameple-file.txt'), 'utf8'); let dataList = { 'OTHER_COLUMN': 1234, 'CLOB_COLUMN': {CLOB_ADDED_HERE} }; await addRecord(con, dataList ); await con.commit(); con.close();
我需要知道{CLOB_ADDED_HERE}处该填写什么才能成功插入,且文本来源是变量或常量而非文件。
解决方案
假设你使用的是Oracle官方的oracledb驱动,分两种场景处理:
1. 短文本场景
如果要插入的文本长度在驱动默认限制内(通常足够处理大多数常规文本),直接将字符串变量/常量赋值给CLOB_COLUMN即可,驱动会自动完成类型转换:
// 用常量字符串示例 const clobText = "这是要插入的CLOB内容"; // 或者用你读取到的str变量 // const clobText = str; let dataList = { 'OTHER_COLUMN': 1234, 'CLOB_COLUMN': clobText };
2. 长文本场景
如果文本内容过大(比如超过几MB),需要显式创建CLOB对象来处理:
const oracledb = require('oracledb'); // 定义长文本变量 const clobText = "超长的CLOB文本内容,比如大段的JSON、HTML或纯文本..."; // 创建CLOB对象 const clobObj = await oracledb.createCLOB(con, clobText); let dataList = { 'OTHER_COLUMN': 1234, 'CLOB_COLUMN': clobObj }; // 插入完成后记得关闭CLOB对象 await addRecord(con, dataList); await clobObj.close();
关键补充
如果你的addRecord函数是基于参数绑定实现的,确保SQL执行时正确绑定变量即可,示例实现如下:
async function addRecord(con, data) { const sql = `INSERT INTO your_table_name (OTHER_COLUMN, DETAILS) VALUES (:OTHER_COLUMN, :CLOB_COLUMN)`; await con.execute(sql, data, { autoCommit: false }); }
无论传入字符串还是CLOB对象,这个实现都能正常工作。
内容的提问来源于stack exchange,提问作者madkimchi
相关产品推荐
相关产品推荐

