Oracle 批量更新表字段
Posted Marydon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle 批量更新表字段相关的知识,希望对你有一定的参考价值。
(一) 将数字替换成汉字
第一步,去重查询
使用distinct关键字先对该字段值进行去重查询,看共有几种情况
--查询指定区间内表停诊字段的值 SELECT DISTINCT T.CLOSE_TZ FROM CONSULT_SCHEDULE T WHERE T.SCHEDULE_DATE BETWEEN TO_DATE(\'2018-01-01\', \'yyyy-MM-dd\') AND TO_DATE(\'2018-02-28\', \'yyyy-MM-dd\');
查询结果:共有3种情况
第二步,区分不同的数值并更新对应的汉字
0改为是,1改为否
使用decode函数实现
--正确sql UPDATE CONSULT_SCHEDULE T SET T.REPLACE_TZ = DECODE(REPLACE_TZ, \'1\', \'否\', \'0\', \'是\') WHERE T.REPLACE_TZ IN (\'0\', \'1\') AND T.SCHEDULE_DATE BETWEEN TO_DATE(\'2018-01-01\', \'yyyy-MM-dd\') AND TO_DATE(\'2018-02-28\', \'yyyy-MM-dd\');
易错点说明:
错误一
--错误sql1:CLOSE_TZ字段是varchar2类型 UPDATE CONSULT_SCHEDULE T SET T.CLOSE_TZ = DECODE(CLOSE_TZ, 1, \'否\', 0, \'是\') WHERE T.SCHEDULE_DATE BETWEEN TO_DATE(\'2018-01-01\', \'yyyy-MM-dd\') AND SYSDATE;
解析:CLOSE_TZ字段是varchar2类型,1和0是number类型
错误二:使用decode()函数必须加上限制条件,否则默认执行的是全表更新!
--错误sql2:使用decode()函数,不在指定的情况会被置空 UPDATE CONSULT_SCHEDULE T SET T.CLOSE_TZ = DECODE(CLOSE_TZ, \'1\', \'否\', \'0\', \'是\') WHERE T.SCHEDULE_DATE BETWEEN TO_DATE(\'2018-01-01\', \'yyyy-MM-dd\') AND SYSDATE;
更新后,再次执行上面的查询语句
原因:根据第一个查询执行的结果,可以得出正确的结果应该使用是和否这2种情况,但这却是3种情况
解析:这是因为decode函数使用不当造成的,应该将不需要更改的列去除掉。
小技巧:在修改数据库数据时,执行update语句后,一定不要急着提交,执行一次查询看看是否是自己想要的结果,再提交。
(二)将一个字段的值给另一字段
UPDATE VIRTUAL_CARD T SET T.ID_CARD=T.CARDNUM WHERE T.ID_CARD IS NULL;
(三)批量修改表字段中指定字符
UpdateTime--2017年8月23日08:44:34
1.1.22 替换字段中指定字符串
--将PATIENT_AUTO_IMAGEINFO表中字段IMAGE_ADRESS中的#号转换成_ UPDATE PATIENT_AUTO_IMAGEINFO SET IMAGE_ADRESS = REPLACE(IMAGE_ADRESS, \'#\', \'_\') WHERE IMAGE_ADRESS LIKE \'%#%\'
(四)根据ID批量修改
UPDATE TSORGDIAITEM set FSTATUS = ?, FAUDITER = ?, FAUDDATE = SYSDATE WHERE FID IN (15632875, 15612443)
以上是关于Oracle 批量更新表字段的主要内容,如果未能解决你的问题,请参考以下文章