Sam 将DBA进行到底

啃小米的羊

  • 博客访问: 1330593
  • 博文数量: 97
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-22 16:38
  • 认证徽章:
个人简介

曾就职于铁道科学研究院,太极计算机公司,合力中税。负责过国家电网数据库部署、迁移、升级、灾备等实施规划工作。大唐发电厂、北京市公安局数据库运维及优化工作。现任金融工场高级DBA岗位,负责oracle、mysql数据库相关工作。拥有Oracle技术10g/11g的 OCP与OCM认证,Oracle YEP成员,OCM联盟成员。

ITPUB论坛APP

ITPUB论坛APP



APP发帖 享双倍积分

文章分类

全部博文(97)

文章存档

2017年(3)

2016年(17)

2015年(48)

2014年(18)

2013年(9)

微信关注

IT168企业级官微



微信号:IT168qiye



系统架构师大会



微信号:SACC2013

订阅
热词专题

分类: Oracle

一、场景描述
     业务需求,现在有张业务表的一个字段为clob类型,要将该字段中部分内容的日期'2016年04月22日’修改为'2016年04月11日’,该替换需要用到replace参数,  注意:oracle 10g 版本以上可使用regexp_replace参数。让我们实验来用用看。

二、实验
1.创建测试表及数据

  1. SAM@OCM11G >create table test_lob(id number,text clob);

  2. Table created.
2.修改系统字符集,否则插入中文为乱码

  1. [oracle@test ~]$ echo $LANG
  2. en_US.UTF-8

  3. [oracle@test ~]$ export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

  4. [oracle@test ~]$ echo $NLS_LANG
  5. AMERICAN_AMERICA.AL32UTF8
3.插入测试数据

  1. SAM@OCM11G >INSERT INTO TEST_LOB VALUES (1,'你好,这里是SAM1的测试环境。2016年12月30日');

  2. 1 row created.

  3. SAM@OCM11G >INSERT INTO TEST_LOB VALUES (2,'你好,这里是SAM2的测试环境。2016年12月30日');

  4. 1 row created.

  5. SAM@OCM11G >INSERT INTO TEST_LOB VALUES (3,'你好,这里是SAM3的测试环境。2016年12月30日');

  6. 1 row created.

  7. SAM@OCM11G >INSERT INTO TEST_LOB VALUES (4,'你好,这里是SAM4的测试环境。2016年12月30日');

  8. 1 row created.

  9. SAM@OCM11G >INSERT INTO TEST_LOB VALUES (5,'你好,这里是SAM5的测试环境。2016年12月30日');

  10. 1 row created.

  11. SAM@OCM11G >INSERT INTO TEST_LOB VALUES (6,'你好,这里是SAM6的测试环境。2016年12月30日');

  12. 1 row created.

  13. SAM@OCM11G >INSERT INTO TEST_LOB VALUES (7,'你好,这里是SAM7的测试环境。2016年12月30日');

  14. 1 row created.

  15. SAM@OCM11G >INSERT INTO TEST_LOB VALUES (8,'你好,这里是SAM8的测试环境。2016年12月30日');

  16. 1 row created.

  17. SAM@OCM11G >commit;

  18. Commit complete.

  19. SAM@OCM11G >set lines 200
  20. SAM@OCM11G >select * from test_lob;

  21.         ID TEXT
  22. ---------- --------------------------------------------------------------------------------
  23.          1 你好,这里是SAM1的测试环境。2016年12月30日
  24.          2 你好,这里是SAM2的测试环境。2016年12月30日
  25.          3 你好,这里是SAM3的测试环境。2016年12月30日
  26.          4 你好,这里是SAM4的测试环境。2016年12月30日
  27.          5 你好,这里是SAM5的测试环境。2016年12月30日
  28.          6 你好,这里是SAM6的测试环境。2016年12月30日
  29.          7 你好,这里是SAM7的测试环境。2016年12月30日
  30.          8 你好,这里是SAM8的测试环境。2016年12月30日

  31. 8 rows selected.
4.修改lob字段中信息日期语法

  1. UPDATE table t
  2.    SET t.lob字段名 = REPLACE(t.lob字段名, ‘替换前内容', '替换后内容')
  3.  WHERE t.sale like '%替换前%;
5.修改lob字段中2016年12月30日为2017年01月07日

  1. SAM@OCM11G >update test_lob t set t.text=replace(text,'2016年12月30日','2017年01月07日') where text like '%2016年12月30日%';

  2. 8 rows updated.

  3. SAM@OCM11G >commit;
6.验证修改后的信息

  1. SAM@OCM11G >select * from test_lob;

  2.         ID TEXT
  3. ---------- --------------------------------------------------------------------------------
  4.          1 你好,这里是SAM1的测试环境。2017年01月07日
  5.          2 你好,这里是SAM2的测试环境。2017年01月07日
  6.          3 你好,这里是SAM3的测试环境。2017年01月07日
  7.          4 你好,这里是SAM4的测试环境。2017年01月07日
  8.          5 你好,这里是SAM5的测试环境。2017年01月07日
  9.          6 你好,这里是SAM6的测试环境。2017年01月07日
  10.          7 你好,这里是SAM7的测试环境。2017年01月07日
  11.          8 你好,这里是SAM8的测试环境。2017年01月07日

  12. 8 rows selected.
三、总结
    修改LOB字段信息中的字符串,不能按照以往的的update 表名 set 字段名=新值 where … 。正确的方法是使用REPLACE函数来替换。注意where 条件就好,借着新年,也祝各位DBA朋友们,HAPPY NEW YEAR. 

阅读(1929) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册