Oracle SQL Developer中如何对表列做MD5哈希并存入对应列
Oracle 表字段MD5哈希值批量更新方案
错误原因分析
你使用INSERT语句的逻辑不符合需求:INSERT是向表中新增全新行记录,仅给MD5列赋值时,表中其他设置了NOT NULL非空约束的字段没有传入有效值,自然触发ORA-01400 无法插入NULL报错。
你的需求是给已有行的对应MD5列赋值,应该使用UPDATE语句而非INSERT。
正确实现步骤
1. 基础全表更新语句
如果需要对全表所有行的TEXT字段计算MD5后存入同一条记录的MD5列,直接执行以下语句即可:
UPDATE TABLENAME SET MD5 = standard_hash(TEXT, 'MD5');
执行完成后提交事务即可生效。
2. 常见优化场景
- 仅更新
MD5列为空的记录,避免重复计算浪费资源:
UPDATE TABLENAME SET MD5 = standard_hash(TEXT, 'MD5') WHERE MD5 IS NULL;
TEXT字段存在空值时,加空值处理避免计算异常:
UPDATE TABLENAME SET MD5 = standard_hash(NVL(TEXT, ' '), 'MD5') WHERE MD5 IS NULL;
注意事项
standard_hash函数返回的是RAW类型,如果你的MD5列定义为VARCHAR2字符串类型,可以先转成十六进制字符串再存储:
UPDATE TABLENAME SET MD5 = LOWER(RAWTOHEX(standard_hash(TEXT, 'MD5')));
大表更新建议分批提交,避免undo空间不足导致执行失败。
内容的提问来源于stack exchange,提问作者nikhil bansal
相关产品推荐
相关产品推荐

