如何编写一个oracle中输入参数为汉字姓名,输出结果为汉字姓名字母全拼的函数
思路:创建一个汉字与全拼的对照表,写个函数将传入的参数分解成行,再与对照表join,然后再用listagg组合起来就可以啦
下面是我写的一个例子,对照表内容需补充
create table wp_test(
word varchar2(2),
qp varchar2(30),
primary key(word));
insert into wp_test values('我','Wo');
insert into wp_test values('愛','Ai');
insert into wp_test values('中','Zhong');
insert into wp_test values('華','Hua');
insert into wp_test values('人','Ren');
insert into wp_test values('民','Min');
insert into wp_test values('共','Gong');
insert into wp_test values('和','He');
insert into wp_test values('國','Guo');
commit;
create or replace function split_words(cnnm varchar2) return varchar2 result_cache RELIES_ON(wp_test)
as
i integer;
cnnmSpr varchar2(2000);
lastwfg boolean;
begin
cnnmspr := '';
lastwfg := false;
if length(cnnm) = 0 or cnnm = '' or cnnm is null then
return '';
end if;
for i in 1..length(cnnm) loop
if lastwfg = true then
cnnmspr:=cnnmspr||substr(cnnm,i-1,2)||chr(61); --
lastwfg := false;
else
if ascii(substr(cnnm,i,1)) >= 128 then
lastwfg:= true;
else
cnnmspr:=cnnmspr||substr(cnnm,i,1)||chr(61);
end if;
end if;
end loop;
return trim(cnnmspr);
end;
/
create or replace function Word_2_QP(pString varchar2) return varchar2 result_cache RELIES_ON(wp_test)
as
QP varchar2(2000);
begin
if pstring is null or length(pstring) = 0 then
return '';
end if;
select distinct listagg(decode(sign(length(b.qp)),1,b.qp,a.w),' ') within GROUP (order by 1) over (partition by 1) into QP
from (
select regexp_substr(strWord, '[^=]+', 1, level) as w
from (select ChAddStr(trim(pString)) as strWord from dual)
connect by level <= LENGTH(strWord) - LENGTH(REPLACE(strWord, '='))
and prior dbms_random.value > 0
) a,wp_test b
where a.w = b.word(+);
return QP;
end;
/

评论
有用 0
墨值悬赏

