You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 05:21:29