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

Oracle存储过程实现向CLOB字段前缀插入带SYSDATE标签内容咨询

Oracle CLOB头部插入带时间标签内容的存储过程实现

实现思路

需要把带时间标签的新内容插入到原有CLOB最前面时,直接用字符串拼接操作在CLOB体积较大时会有性能和长度限制问题,因此基于DBMS_LOB包的原生操作实现,兼容大CLOB场景,同时和你原有lob_append的调用逻辑、标签格式保持完全兼容。

存储过程代码

CREATE OR REPLACE PROCEDURE lob_prepend(
  p_clob IN OUT CLOB,
  p_text IN     VARCHAR2
)
AS
  l_new_prefix VARCHAR2(32760);
  l_date_string VARCHAR2(50);
  l_original_clob CLOB;
BEGIN
  -- 生成时间标签,格式和原有逻辑一致
  SELECT '[' || TO_CHAR (SYSDATE, 'MM-DD-YYYY HH24:MI:SS') || ']'
  INTO l_date_string FROM dual;

  -- 组装带时间标签和换行的前缀内容
  l_new_prefix := CHR(10) || l_date_string || CHR(10)
                  || p_text || CHR(10)
                  || l_date_string || CHR(10);

  -- 暂存原CLOB内容
  l_original_clob := p_clob;
  
  -- 清空原CLOB,先写入新前缀
  DBMS_LOB.TRIM(p_clob, 0);
  DBMS_LOB.WRITEAPPEND(p_clob, LENGTH(l_new_prefix), l_new_prefix);
  
  -- 把原CLOB内容追加到新前缀后面,完成头部插入
  DBMS_LOB.WRITEAPPEND(p_clob, DBMS_LOB.GETLENGTH(l_original_clob), l_original_clob);
END;
/

调用示例

调用方式和你原有lob_append完全一致,仅需要替换存储过程名即可:

DECLARE
  l_clob CLOB := empty_clob();
BEGIN
  SELECT c INTO l_clob FROM t WHERE seq_num = 1 FOR UPDATE;
  -- 内容将插入到CLOB最头部
  lob_prepend(l_clob, RPAD('A',20,'A'));
  COMMIT;
END;
/

调用完成后查询CLOB内容,新插入的带时间标签内容会出现在原有所有内容的最前面,和你提供的UPDATE语句逻辑完全一致。

内容的提问来源于stack exchange,提问作者Pugzly

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 05:06:09