日期:2014-05-17  浏览次数:21006 次

求助,求一存储过程,substr,instr 有关字段解密,
本帖最后由 hwhtj 于 2013-05-15 09:04:59 编辑
oracle 
有表tb1存储着一些姓名,结构如下
id      xm
1       ^1V6FV10V2CV6GV1KVKJV6GV1KV1C
2       ^1V6GV1KVK2V6FV26VJKV6GV1KV1C
有表tb2(密码字典)
存储着汉字与其对应加密码结构如下
key     pas
张       FV10V2C
三       GV1KVKJ
丰       GV1KV1C
上       GV1KVK2
官       FV26VJK



tb1.xm字段,是按如下规则填充的
^1V6+第一个字的加密码+V6+第二个字的加密码+V6+第三个字的加密码(如果有第个字,类推)
如张三丰的加密数据为:^1V6FV10V2CV6GV1KVKJV6GV1KV1C

求一解密储存过程
更新tb1.xm字段,显示汉字明文
如‘^1V6FV10V2CV6GV1KVKJV6GV1KV1C’更新为‘张三丰’
‘^1V6GV1KVK2V6FV26VJKV6GV1KV1C’ 更新为’上官丰’

------解决方案--------------------
刚刚给你回的

解密:

declare
  v1 varchar2(10);
  v2 varchar2(10);
begin
  for a in (select t.id, regexp_replace(t.xm, '\^1V6
------解决方案--------------------
V6', ',') xm from tb1 t) loop
  
    for b in (select regexp_substr(a.xm, '[^,]+', 1, level) xm
                from dual
              connect by level <= regexp_count(a.xm, ',')) loop
      --dbms_output.put_line(b.xm);
      select t.key into v1 from tb2 t where t.pas = b.xm;
      v2 := v2 
------解决方案--------------------
 v1;
      --dbms_output.put_line(v2);
    end loop;
    update tb1 set tb1.xm = v2 where tb1.id = a.id;
    v2 := '';
  end loop;
  commit;
end;