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

求一函数,有关字符串替换
有表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’ 更新为’上官丰’

------解决方案--------------------
引用:
Quote: 引用:

我开始给你写的解密代码,你说效率不行,对应成函数你是怎么改的?

create or replace function NG_umm(name in varchar2) return varchar2 is
   Result varchar2(400);
   ls_sql varchar2(4000);
   v_length number:=(length(name)-2)/9;
   v_mm varchar2(4000);
 begin
   begin
     for i in  1..v_length loop
   ls_sql:='select a.key from jm a where a.pas='''
------解决方案--------------------
substr(regexp_replace(name, '\^1V6
------解决方案--------------------
V6', ''),'
------解决方案--------------------
i*7-6
------解决方案--------------------
',7)
------解决方案--------------------
'''';
      execute immediate ls_sql into v_mm;
      Result:= Result
------解决方案--------------------
v_mm;
     end loop;
   exception when others then  Result:='';  end ; return(Result);
 end ;


下面这样试下,你那个ls_sql 拼的有问题:

create or replace function NG_umm(name in varchar2) return varchar2 is
  Result   varchar2(400);
  ls_sql   varchar2(4000);
  v_length number := (length(name) - 2) / 9;
  v_mm     varchar2(4000);
  m        number;
begin
  begin
    for i in 1 .. v_length loop
      /*  ls_sql := 'select a.key from jm a where a.pas='''