欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

Oracle 根据汉字返回拼音函数

程序员文章站 2022-05-13 11:53:46
...

oracle 根据汉字返回拼音函数,研究了一个多小时,才弄出来;上来贴代码吧。。 --------------Type Definition CREATE OR REPLAC

Oracle 根据汉字返回拼音函数,研究了一个多小时,,才弄出来;

上来贴代码吧。。

--------------Type Definition


CREATE OR REPLACE TYPE spell_code AS OBJECT
(

spell varchar2(10),
code Varchar2(10)
);

-------------Create Table Type

CREATE OR REPLACE TYPE t_spellcode AS TABLE OF spell_code;

--------------字典函数:

create or replace function f_getSpellcode return t_spellcode Pipelined

is

Begin

PIPE Row(spell_code('a', -20319));

PIPE Row(spell_code('ai', -20317));

PIPE Row(spell_code('an', -20304));

PIPE Row(spell_code('ang', -20295));

PIPE Row(spell_code('ao', -20292));

PIPE Row(spell_code('ba', -20283));

PIPE Row(spell_code('bai', -20265));

PIPE Row(spell_code('ban', -20257));

PIPE Row(spell_code('bang', -20242));

PIPE Row(spell_code('bao', -20230));

PIPE Row(spell_code('bei', -20051));

PIPE Row(spell_code('ben', -20036));

PIPE Row(spell_code('beng', -20032));

PIPE Row(spell_code('bi', -20026));

PIPE Row(spell_code('bian', -20002));

PIPE Row(spell_code('biao', -19990));

PIPE Row(spell_code('bie', -19986));

PIPE Row(spell_code('bin', -19982));

PIPE Row(spell_code('bing', -19976));

PIPE Row(spell_code('bo', -19805));

PIPE Row(spell_code('bu', -19784));

PIPE Row(spell_code('ca', -19775));

PIPE Row(spell_code('cai', -19774));

PIPE Row(spell_code('can', -19763));

PIPE Row(spell_code('cang', -19756));

PIPE Row(spell_code('cao', -19751));

PIPE Row(spell_code('ce', -19746));

PIPE Row(spell_code('ceng', -19741));

PIPE Row(spell_code('cha', -19739));

PIPE Row(spell_code('chai', -19728));

PIPE Row(spell_code('chan', -19725));

PIPE Row(spell_code('chang', -19715));

PIPE Row(spell_code('chao', -19540));

PIPE Row(spell_code('che', -19531));

PIPE Row(spell_code('chen', -19525));

PIPE Row(spell_code('cheng', -19515));

PIPE Row(spell_code('chi', -19500));

PIPE Row(spell_code('chong', -19484));

PIPE Row(spell_code('chou', -19479));

PIPE Row(spell_code('chu', -19467));

PIPE Row(spell_code('chuai', -19289));

PIPE Row(spell_code('chuan', -19288));

PIPE Row(spell_code('chuang', -19281));

PIPE Row(spell_code('chui', -19275));

PIPE Row(spell_code('chun', -19270));

PIPE Row(spell_code('chuo', -19263));

PIPE Row(spell_code('ci', -19261));

PIPE Row(spell_code('cong', -19249));

PIPE Row(spell_code('cou', -19243));

PIPE Row(spell_code('cu', -19242));

PIPE Row(spell_code('cuan', -19238));

PIPE Row(spell_code('cui', -19235));

PIPE Row(spell_code('cun', -19227));

PIPE Row(spell_code('cuo', -19224));

PIPE Row(spell_code('da', -19218));

PIPE Row(spell_code('dai', -19212));

PIPE Row(spell_code('dan', -19038));

PIPE Row(spell_code('dang', -19023));

PIPE Row(spell_code('dao', -19018));

PIPE Row(spell_code('de', -19006));

PIPE Row(spell_code('deng', -19003));

PIPE Row(spell_code('di', -18996));

PIPE Row(spell_code('dian', -18977));

PIPE Row(spell_code('diao', -18961));

PIPE Row(spell_code('die', -18952));

PIPE Row(spell_code('ding', -18783));

PIPE Row(spell_code('diu', -18774));

PIPE Row(spell_code('dong', -18773));

PIPE Row(spell_code('dou', -18763));

PIPE Row(spell_code('du', -18756));

PIPE Row(spell_code('duan', -18741));

PIPE Row(spell_code('dui', -18735));

PIPE Row(spell_code('dun', -18731));

PIPE Row(spell_code('duo', -18722));

PIPE Row(spell_code('e', -18710));

PIPE Row(spell_code('en', -18697));

PIPE Row(spell_code('er', -18696));

PIPE Row(spell_code('fa', -18526));

PIPE Row(spell_code('fan', -18518));

PIPE Row(spell_code('fang', -18501));

PIPE Row(spell_code('fei', -18490));

PIPE Row(spell_code('fen', -18478));

PIPE Row(spell_code('feng', -18463));

PIPE Row(spell_code('fo', -18448));

PIPE Row(spell_code('fou', -18447));

PIPE Row(spell_code('fu', -18446));

PIPE Row(spell_code('ga', -18239));

PIPE Row(spell_code('gai', -18237));

PIPE Row(spell_code('gan', -18231));

PIPE Row(spell_code('gang', -18220));

PIPE Row(spell_code('gao', -18211));

PIPE Row(spell_code('ge', -18201));

PIPE Row(spell_code('gei', -18184));

PIPE Row(spell_code('gen', -18183));

PIPE Row(spell_code('geng', -18181));

PIPE Row(spell_code('gong', -18012));

PIPE Row(spell_code('gou', -17997));

PIPE Row(spell_code('gu', -17988));

PIPE Row(spell_code('gua', -17970));

PIPE Row(spell_code('guai', -17964));

PIPE Row(spell_code('guan', -17961));

PIPE Row(spell_code('guang', -17950));

PIPE Row(spell_code('gui', -17947));

PIPE Row(spell_code('gun', -17931));

PIPE Row(spell_code('guo', -17928));

PIPE Row(spell_code('ha', -17922));

PIPE Row(spell_code('hai', -17759));

PIPE Row(spell_code('han', -17752));

PIPE Row(spell_code('hang', -17733));

PIPE Row(spell_code('hao', -17730));

PIPE Row(spell_code('he', -17721));

PIPE Row(spell_code('hei', -17703));

PIPE Row(spell_code('hen', -17701));

PIPE Row(spell_code('heng', -17697));

PIPE Row(spell_code('hong', -17692));

PIPE Row(spell_code('hou', -17683));

PIPE Row(spell_code('hu', -17676));

PIPE Row(spell_code('hua', -17496));

PIPE Row(spell_code('huai', -17487));

PIPE Row(spell_code('huan', -17482));

PIPE Row(spell_code('huang', -17468));

PIPE Row(spell_code('hui', -17454));

PIPE Row(spell_code('hun', -17433));

PIPE Row(spell_code('huo', -17427));

PIPE Row(spell_code('ji', -17417));

PIPE Row(spell_code('jia', -17202));

PIPE Row(spell_code('jian', -17185));

PIPE Row(spell_code('jiang', -16983));

PIPE Row(spell_code('jiao', -16970));

PIPE Row(spell_code('jie', -16942));

PIPE Row(spell_code('jin', -16915));

PIPE Row(spell_code('jing', -16733));

PIPE Row(spell_code('jiong', -16708));

PIPE Row(spell_code('jiu', -16706));

PIPE Row(spell_code('ju', -16689));

PIPE Row(spell_code('juan', -16664));

PIPE Row(spell_code('jue', -16657));

PIPE Row(spell_code('jun', -16647));

PIPE Row(spell_code('ka', -16474));

PIPE Row(spell_code('kai', -16470));

PIPE Row(spell_code('kan', -16465));

PIPE Row(spell_code('kang', -16459));

PIPE Row(spell_code('kao', -16452));

PIPE Row(spell_code('ke', -16448));

PIPE Row(spell_code('ken', -16433));

PIPE Row(spell_code('keng', -16429));

PIPE Row(spell_code('kong', -16427));

PIPE Row(spell_code('kou', -16423));

PIPE Row(spell_code('ku', -16419));

PIPE Row(spell_code('kua', -16412));

PIPE Row(spell_code('kuai', -16407));

PIPE Row(spell_code('kuan', -16403));

PIPE Row(spell_code('kuang', -16401));

PIPE Row(spell_code('kui', -16393));

PIPE Row(spell_code('kun', -16220));

PIPE Row(spell_code('kuo', -16216));

PIPE Row(spell_code('la', -16212));

PIPE Row(spell_code('lai', -16205));

PIPE Row(spell_code('lan', -16202));

PIPE Row(spell_code('lang', -16187));

PIPE Row(spell_code('lao', -16180));

PIPE Row(spell_code('le', -16171));

PIPE Row(spell_code('lei', -16169));

PIPE Row(spell_code('leng', -16158));

PIPE Row(spell_code('li', -16155));

PIPE Row(spell_code('lia', -15959));

PIPE Row(spell_code('lian', -15958));

PIPE Row(spell_code('liang', -15944));

PIPE Row(spell_code('liao', -15933));

PIPE Row(spell_code('lie', -15920));

PIPE Row(spell_code('lin', -15915));

PIPE Row(spell_code('ling', -15903));

PIPE Row(spell_code('liu', -15889));

PIPE Row(spell_code('long', -15878));

PIPE Row(spell_code('lou', -15707));

PIPE Row(spell_code('lu', -15701));

PIPE Row(spell_code('lv', -15681));

PIPE Row(spell_code('luan', -15667));

PIPE Row(spell_code('lue', -15661));

PIPE Row(spell_code('lun', -15659));

PIPE Row(spell_code('luo', -15652));

PIPE Row(spell_code('ma', -15640));

PIPE Row(spell_code('mai', -15631));

PIPE Row(spell_code('man', -15625));

PIPE Row(spell_code('mang', -15454));

PIPE Row(spell_code('mao', -15448));

PIPE Row(spell_code('me', -15436));

PIPE Row(spell_code('mei', -15435));

PIPE Row(spell_code('men', -15419));

PIPE Row(spell_code('meng', -15416));

PIPE Row(spell_code('mi', -15408));

PIPE Row(spell_code('mian', -15394));

PIPE Row(spell_code('miao', -15385));

PIPE Row(spell_code('mie', -15377));

PIPE Row(spell_code('min', -15375));

PIPE Row(spell_code('ming', -15369));

PIPE Row(spell_code('miu', -15363));

PIPE Row(spell_code('mo', -15362));

PIPE Row(spell_code('mou', -15183));

PIPE Row(spell_code('mu', -15180));

PIPE Row(spell_code('na', -15165));

PIPE Row(spell_code('nai', -15158));

PIPE Row(spell_code('nan', -15153));

PIPE Row(spell_code('nang', -15150));

PIPE Row(spell_code('nao', -15149));

PIPE Row(spell_code('ne', -15144));

PIPE Row(spell_code('nei', -15143));

PIPE Row(spell_code('nen', -15141));

PIPE Row(spell_code('neng', -15140));

PIPE Row(spell_code('ni', -15139));

PIPE Row(spell_code('nian', -15128));

PIPE Row(spell_code('niang', -15121));

PIPE Row(spell_code('niao', -15119));

PIPE Row(spell_code('nie', -15117));

PIPE Row(spell_code('nin', -15110));

PIPE Row(spell_code('ning', -15109));

PIPE Row(spell_code('niu', -14941));

PIPE Row(spell_code('nong', -14937));

PIPE Row(spell_code('nu', -14933));

PIPE Row(spell_code('nv', -14930));

PIPE Row(spell_code('nuan', -14929));

PIPE Row(spell_code('nue', -14928));

PIPE Row(spell_code('nuo', -14926));

PIPE Row(spell_code('o', -14922));

PIPE Row(spell_code('ou', -14921));

PIPE Row(spell_code('pa', -14914));

PIPE Row(spell_code('pai', -14908));

PIPE Row(spell_code('pan', -14902));

PIPE Row(spell_code('pang', -14894));

PIPE Row(spell_code('pao', -14889));

PIPE Row(spell_code('pei', -14882));

PIPE Row(spell_code('pen', -14873));

PIPE Row(spell_code('peng', -14871));

PIPE Row(spell_code('pi', -14857));

PIPE Row(spell_code('pian', -14678));

PIPE Row(spell_code('piao', -14674));

PIPE Row(spell_code('pie', -14670));

PIPE Row(spell_code('pin', -14668));

PIPE Row(spell_code('ping', -14663));

PIPE Row(spell_code('po', -14654));

PIPE Row(spell_code('pu', -14645));

PIPE Row(spell_code('qi', -14630));

PIPE Row(spell_code('qia', -14594));

PIPE Row(spell_code('qian', -14429));

PIPE Row(spell_code('qiang', -14407));

PIPE Row(spell_code('qiao', -14399));

PIPE Row(spell_code('qie', -14384));

PIPE Row(spell_code('qin', -14379));

PIPE Row(spell_code('qing', -14368));

PIPE Row(spell_code('qiong', -14355));

PIPE Row(spell_code('qiu', -14353));

PIPE Row(spell_code('qu', -14345));

PIPE Row(spell_code('quan', -14170));

PIPE Row(spell_code('que', -14159));

PIPE Row(spell_code('qun', -14151));

PIPE Row(spell_code('ran', -14149));

PIPE Row(spell_code('rang', -14145));

PIPE Row(spell_code('rao', -14140));

PIPE Row(spell_code('re', -14137));

PIPE Row(spell_code('ren', -14135));

PIPE Row(spell_code('reng', -14125));

PIPE Row(spell_code('ri', -14123));

PIPE Row(spell_code('rong', -14122));

PIPE Row(spell_code('rou', -14112));

PIPE Row(spell_code('ru', -14109));

PIPE Row(spell_code('ruan', -14099));

PIPE Row(spell_code('rui', -14097));

PIPE Row(spell_code('run', -14094));

PIPE Row(spell_code('ruo', -14092));

PIPE Row(spell_code('sa', -14090));

PIPE Row(spell_code('sai', -14087));

PIPE Row(spell_code('san', -14083));

PIPE Row(spell_code('sang', -13917));

PIPE Row(spell_code('sao', -13914));

PIPE Row(spell_code('se', -13910));

PIPE Row(spell_code('sen', -13907));

PIPE Row(spell_code('seng', -13906));

PIPE Row(spell_code('sha', -13905));

PIPE Row(spell_code('shai', -13896));

PIPE Row(spell_code('shan', -13894));

PIPE Row(spell_code('shang', -13878));

PIPE Row(spell_code('shao', -13870));

PIPE Row(spell_code('she', -13859));

PIPE Row(spell_code('shen', -13847));

PIPE Row(spell_code('sheng', -13831));

PIPE Row(spell_code('shi', -13658));

PIPE Row(spell_code('shou', -13611));

PIPE Row(spell_code('shu', -13601));

PIPE Row(spell_code('shua', -13406));

PIPE Row(spell_code('shuai', -13404));

PIPE Row(spell_code('shuan', -13400));

PIPE Row(spell_code('shuang', -13398));

PIPE Row(spell_code('shui', -13395));

PIPE Row(spell_code('shun', -13391));

PIPE Row(spell_code('shuo', -13387));

PIPE Row(spell_code('si', -13383));

PIPE Row(spell_code('song', -13367));

PIPE Row(spell_code('sou', -13359));

PIPE Row(spell_code('su', -13356));

PIPE Row(spell_code('suan', -13343));

PIPE Row(spell_code('sui', -13340));

PIPE Row(spell_code('sun', -13329));

PIPE Row(spell_code('suo', -13326));

PIPE Row(spell_code('ta', -13318));

PIPE Row(spell_code('tai', -13147));

PIPE Row(spell_code('tan', -13138));

PIPE Row(spell_code('tang', -13120));

PIPE Row(spell_code('tao', -13107));

PIPE Row(spell_code('te', -13096));

PIPE Row(spell_code('teng', -13095));

PIPE Row(spell_code('ti', -13091));

PIPE Row(spell_code('tian', -13076));

PIPE Row(spell_code('tiao', -13068));

PIPE Row(spell_code('tie', -13063));

PIPE Row(spell_code('ting', -13060));

PIPE Row(spell_code('tong', -12888));

PIPE Row(spell_code('tou', -12875));

PIPE Row(spell_code('tu', -12871));

PIPE Row(spell_code('tuan', -12860));

PIPE Row(spell_code('tui', -12858));

PIPE Row(spell_code('tun', -12852));

PIPE Row(spell_code('tuo', -12849));

PIPE Row(spell_code('wa', -12838));

PIPE Row(spell_code('wai', -12831));

PIPE Row(spell_code('wan', -12829));

PIPE Row(spell_code('wang', -12812));

PIPE Row(spell_code('wei', -12802));

PIPE Row(spell_code('wen', -12607));

PIPE Row(spell_code('weng', -12597));

PIPE Row(spell_code('wo', -12594));

PIPE Row(spell_code('wu', -12585));

PIPE Row(spell_code('xi', -12556));

PIPE Row(spell_code('xia', -12359));

PIPE Row(spell_code('xian', -12346));

PIPE Row(spell_code('xiang', -12320));

PIPE Row(spell_code('xiao', -12300));

PIPE Row(spell_code('xie', -12120));

PIPE Row(spell_code('xin', -12099));

PIPE Row(spell_code('xing', -12089));

PIPE Row(spell_code('xiong', -12074));

PIPE Row(spell_code('xiu', -12067));

PIPE Row(spell_code('xu', -12058));

PIPE Row(spell_code('xuan', -12039));

PIPE Row(spell_code('xue', -11867));

PIPE Row(spell_code('xun', -11861));

PIPE Row(spell_code('ya', -11847));

PIPE Row(spell_code('yan', -11831));

PIPE Row(spell_code('yang', -11798));

PIPE Row(spell_code('yao', -11781));

PIPE Row(spell_code('ye', -11604));

PIPE Row(spell_code('yi', -11589));

PIPE Row(spell_code('yin', -11536));

PIPE Row(spell_code('ying', -11358));

PIPE Row(spell_code('yo', -11340));

PIPE Row(spell_code('yong', -11339));

PIPE Row(spell_code('you', -11324));

PIPE Row(spell_code('yu', -11303));

PIPE Row(spell_code('yuan', -11097));

PIPE Row(spell_code('yue', -11077));

PIPE Row(spell_code('yun', -11067));

PIPE Row(spell_code('za', -11055));

PIPE Row(spell_code('zai', -11052));

PIPE Row(spell_code('zan', -11045));

PIPE Row(spell_code('zang', -11041));

PIPE Row(spell_code('zao', -11038));

PIPE Row(spell_code('ze', -11024));

PIPE Row(spell_code('zei', -11020));

PIPE Row(spell_code('zen', -11019));

PIPE Row(spell_code('zeng', -11018));

PIPE Row(spell_code('zha', -11014));

PIPE Row(spell_code('zhai', -10838));

PIPE Row(spell_code('zhan', -10832));

PIPE Row(spell_code('zhang', -10815));

PIPE Row(spell_code('zhao', -10800));

PIPE Row(spell_code('zhe', -10790));

PIPE Row(spell_code('zhen', -10780));

PIPE Row(spell_code('zheng', -10764));

PIPE Row(spell_code('zhi', -10587));

PIPE Row(spell_code('zhong', -10544));

PIPE Row(spell_code('zhou', -10533));

PIPE Row(spell_code('zhu', -10519));

PIPE Row(spell_code('zhua', -10331));

PIPE Row(spell_code('zhuai', -10329));

PIPE Row(spell_code('zhuan', -10328));

PIPE Row(spell_code('zhuang', -10322));

PIPE Row(spell_code('zhui', -10315));

PIPE Row(spell_code('zhun', -10309));

PIPE Row(spell_code('zhuo', -10307));

PIPE Row(spell_code('zi', -10296));

PIPE Row(spell_code('zong', -10281));

PIPE Row(spell_code('zou', -10274));

PIPE Row(spell_code('zu', -10270));

PIPE Row(spell_code('zuan', -10262));

PIPE Row(spell_code('zui', -10260));

PIPE Row(spell_code('zun', -10256));

PIPE Row(spell_code('zuo', -10254));

Return;

end;

--------------- 返回函数, 该函数会调用上面的字典函数

create or replace function f_getSpell(p_cnStr In varchar2,

p_sign In number Default Null)

return varchar2 as

lv_spell varchar2(200);

lv_temp Varchar2(10);

lv_char varchar2(10);

lv_bytes varchar2(100);

li_bytes Integer;

li_pos Integer;

begin

if p_cnStr is null then

return '';

end if;

for i In 1 .. length(p_cnStr) loop

lv_char := substr(p_cnStr, i, 1);

if lengthb(lv_char) = 1 then

lv_spell := lv_spell || lv_char;

elsif lengthb(lv_char) = 2 then

Select replace(substrb(dump(lv_char,1010),instrb(dump(lv_char,1010),'ZHS16GBK:')),'ZHS16GBK: ','') Into lv_bytes from dual;

li_pos:=instr(lv_bytes,',');

li_bytes:=substr(lv_bytes,1,li_pos-1)*256+substr(lv_bytes,li_pos+1)-256*256;

Select ascii(lv_char) - 256 * 256 Into li_bytes From dual;

If (li_bytes -10247) Then

lv_spell := lv_spell || '*';

Else

select max(spell)

Into lv_temp

from table(f_getSpellcode)

where code

if p_sign Is Null then

lv_spell := lv_spell || substr(lv_temp, 1, 1);

else

lv_spell := lv_spell || lv_temp;

end if;

End If;

elsif lengthb(lv_char) = 3 then

Select replace(substrb(dump(convert(lv_char, 'ZHS16GBK', 'UTF8'),

1010),

instrb(dump(convert(lv_char, 'ZHS16GBK', 'UTF8'),

1010),

'UTF8:')),

'UTF8: ',

'')

Into lv_bytes

from dual;

li_pos := instr(lv_bytes, ',');

li_bytes := substr(lv_bytes, 1, li_pos - 1) * 256 +

substr(lv_bytes, li_pos + 1) - 256 * 256;

If (li_bytes -10247) Then

lv_spell := lv_spell || '*';

Else

select max(spell)

Into lv_temp

from table(f_getSpellcode)

where code

if p_sign Is Null then

lv_spell := lv_spell || substr(lv_temp, 1, 1);

else

lv_spell := lv_spell || lv_temp;

end if;

End If;

end if;

end loop;

return lv_spell;

end;

--------------示例:

SQL> select f_getspell('安徽理工大学') from dual;

F_GETSPELL('安徽理工大学')
------------------------------------------------------------------------------

ahlgdx

SQL> select f_getspell('安徽理工大学',1) from dual;

F_GETSPELL('安徽理工大学',1)
----------------------------------------------------------------------------

anhuiligongdaxue

Oracle 根据汉字返回拼音函数