create or replace function f_hanzi_to_pinyin
(v_hanzi nvarchar2) return varchar2 is
v_pinyin nvarchar2(1000);
m_length integer;
m_single_hanzi nvarchar2(2);
m_pinyin nvarchar2(50);
m_py_count integer;
begin
m_length:=length(v_hanzi);
v_pinyin:='';
if v_hanzi is null then
return '*';
end if;
for i in 1..m_length loop
m_pinyin:=null;
m_single_hanzi:=substr(v_hanzi,i,1);
if (ascii(m_single_hanzi) between 33 and 128) then
m_pinyin:=null;
else
declare
cursor c_py is
select s.pinyin
from t_py_char s
where s.hanzi like '%'||m_single_hanzi||'%';
begin
m_py_count:=0;
for r in c_py loop
m_pinyin:=m_pinyin||' '||r.pinyin;
m_py_count:=m_py_count+1;
end loop;
if m_py_count>1 then
m_pinyin:=' ['||trim(m_pinyin)||']';
end if;
exception
when others then
m_pinyin:='';
end;
end if;
v_pinyin:=v_pinyin||m_pinyin;
end loop;
return(trim(v_pinyin));
exception
when others then
return('*');
end ;
(v_hanzi nvarchar2) return varchar2 is
v_pinyin nvarchar2(1000);
m_length integer;
m_single_hanzi nvarchar2(2);
m_pinyin nvarchar2(50);
m_py_count integer;
begin
m_length:=length(v_hanzi);
v_pinyin:='';
if v_hanzi is null then
return '*';
end if;
for i in 1..m_length loop
m_pinyin:=null;
m_single_hanzi:=substr(v_hanzi,i,1);
if (ascii(m_single_hanzi) between 33 and 128) then
m_pinyin:=null;
else
declare
cursor c_py is
select s.pinyin
from t_py_char s
where s.hanzi like '%'||m_single_hanzi||'%';
begin
m_py_count:=0;
for r in c_py loop
m_pinyin:=m_pinyin||' '||r.pinyin;
m_py_count:=m_py_count+1;
end loop;
if m_py_count>1 then
m_pinyin:=' ['||trim(m_pinyin)||']';
end if;
exception
when others then
m_pinyin:='';
end;
end if;
v_pinyin:=v_pinyin||m_pinyin;
end loop;
return(trim(v_pinyin));
exception
when others then
return('*');
end ;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/77580/viewspace-212676/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/77580/viewspace-212676/