求一函数,有关字符串替换
有表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='''