oracle数据库clob字段处理

Oracle数据库CLOB字段提示ORA-01704:字符串文字太长的处理方法

1.方法一:插入的SQL比较少,那么可以人工处理。

针对可以使用PL/SQL工具连接的数据库:

1、打开PL/SQL工具,输入SQL语句,如下:

   select * from 表名 for UPDATE;

2、把更新的小锁打开,找到CLOB字段,点击 ‘…’, 将内容复制进来,点击’确定’按钮,点击绿色对勾提交即可。

2.方法二:如果插入的SQL比较多,那么需要先把所有的SQL语句插入到表中,然后对SQL语句进行处理。

首先需要找规律,找到规律了,然后用PL/SQL块进行插入或更新即可。
对Oracle数据库插入或者更新CLOB字段的时候,直接拼接了一个INSERT INTO和UPDATE语句,类似下面这种:
INSERT INTO 表名(字段1, 字段2, CLOB字段) VALUES (‘XX’, ‘XXX’, ‘内容非常多’);
UPDATE 表名 T SET T.CLOB字段名 = ‘内容非常多’;

oracle默认把字符串转换成varchar2类型,而这个字符串的长度,又比4000大,所以会报ORA-01704错误。
说得通俗一点,就是两个单引号之间的字符不能超过4000。

解决办法:使用PL/SQL语法,采取绑定变量的方式解决,而不是直接拼接SQL

DECLARE  
  clobValue 表名.字段名%TYPE;  
BEGIN  
  clobValue := 'XXX'; ----字段内容,但是单引号中的内容不能超过4000字符
  UPDATE 表名 T SET T.字段名 = clobValue WHERE 条件;  
  COMMIT;  
END;  
/  
--采取绑定变量 2

DECLARE 
       V_LANG CLOB := '待插入的海量字符串';
       
       V_UPDATE CLOB := '更新的海量字符串';
BEGIN

  INSERT INTO temp t VALUES ('Grand.Jon', 22, V_LANG);        --增加

  UPDATE temp t SET t.temp_clob = V_UPDATE WHERE rownum = 1;  --修改

  SELECT t.NAME, dbms_lob.substr(t.temp_clob) FROM TEMP t;    --查询  将CLOB转成字符类型

  DELETE temp t WHERE rownum = 1;                             --按列删除  

  COMMIT;

END;
/
-- insert多个绑定变量
declare
v_clob1 clob:='一个长文本1';
v_clob2 clob:='一个长文本2';
begin
  insert into 表名 values('1',v_clob1,v_clob2);
end;
/

3.方法三 使用sql命令插入clob数据(大于4000,适用于18c)

–使用sql命令插入clob数据(大于4000,适用于18c)

INSERT INTO XXXX.XXXX
  (UPDATE_TIME, FILE_NAME, FILE_TYPE, CONTENT)
VALUES
  (TO_TIMESTAMP('22-10月-20 02.30.45.000000000 下午',
                'DD-MON-RR HH.MI.SSXFF AM'),
   'CCCCC_2020-10-16.RB',
   'test5',
   TO_CLOB(q'[]') || TO_CLOB(q'[]') || TO_CLOB(q'[]') || TO_CLOB(q'[]'));
  --在q'[]’中填写小于4000个字符的值,如果有9000个,就分成三段,如: 
INSERT INTO XXXX.XXXX
     (UPDATE_TIME, FILE_NAME, FILE_TYPE, CONTENT)
   VALUES
     (TO_TIMESTAMP('22-10月-20 02.30.45.000000000 下午','DD-MON-RR HH.MI.SSXFF AM'), 'CCCCC_2020-10-16.RB', 'test5',
      TO_CLOB(q'[AAAAAAAAAAAAAAAAAAAAA]') || TO_CLOB(q'[BBBBBBBBBBBBBBBBB]') || TO_CLOB(q'[CCCCCCCCCCCCCCCCCCC]'));

–其他参考方法 https://blog.51cto.com/u_11310506/2431176

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值