CREATE OR REPLACE FUNCTION GetHzPYCAP(p_String
varchar2)
--?????
RETURN VARCHAR2 IS
--declare
--p_String varchar2(200) := '???????';
v_char
varchar2(
2);
--????
n_loop
number;
--??
n_len
number;
--????
n_ascii
number;
--??ASCII?
n_ord_high
number;
--n_ascii/156
n_ord_low
number;
--n mod 256
n_temp
number;
n_temp1 number;
v_PY varchar2(
32767);
BEGIN
if p_String
IS NULL then
RETURN '';
end if;
v_PY := '';
n_len := length(p_String);
FOR n_loop
IN 1..n_len LOOP
v_char := substr(p_string,n_loop,
1);
IF upper(v_char)
IN (
'A',
'B',
'C',
'D',
'E',
'F',
'G',
'H',
'I',
'J',
'K',
'L',
'M',
'N',
'O',
'P',
'Q',
'R',
'S',
'T',
'U',
'V',
'W',
'X',
'Y',
'Z',
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'(',
')',
'[',
']',
'.',
'!',
'@',
'#',
'$',
'%',
'^',
'&',
'*',
'-',
'+',
'<',
'>',
'?',
':',
'"')
THEN
v_PY := v_PY
||v_char;
ELSE
n_ascii := ascii(v_char);
n_ord_high := trunc(n_ascii
/256,
0);
n_ord_low := n_ascii
-(n_ord_high
*256);
--DBMS_OUTPUT.PUT_LINE('n_ascii = '||to_char(n_ascii,'9999999'));
--DBMS_OUTPUT.PUT_LINE('n_ord_high = '||to_char(n_ord_high,'9999999'));
--DBMS_OUTPUT.PUT_LINE('n_ord_low = '||to_char(n_ord_low,'9999999'));
IF (n_ord_high
>128)
and (n_ord_low
>63)
THEN
CASE n_ord_high
WHEN 162 THEN --????
IF n_ord_low
>160 THEN
v_PY := v_PY
||get_roma_num_py(n_ord_low
-160);
END IF;
WHEN 163 THEN --??ASCII
IF n_ord_low
>128 THEN
v_char := chr(n_ord_low
-128);
IF upper(v_char)
IN (
'A',
'B',
'C',
'D',
'E',
'F',
'G',
'H',
'I',
'J',
'K',
'L',
'M',
'N',
'O',
'P',
'Q',
'R',
'S',
'T',
'U',
'V',
'W',
'X',
'Y',
'Z',
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'(',
')',
'[',
']')
THEN
v_PY := v_PY
||v_char;
END IF;
END IF;
WHEN 166 THEN --????
IF (n_ord_low
>160)
AND (n_ord_low
<185)
THEN --A1--B8
v_PY :
= v_PY
||get_greece_alphabet_py(n_ord_low
-160);
ELSE
IF (n_ord_low
>192)
AND (n_ord_low
<217)
THEN --C1--D8
v_PY :
= v_PY
||get_greece_alphabet_py(n_ord_low
-192);
END IF;
END IF;
ELSE
BEGIN
n_temp := n_ord_high
-128;
n_ord_low := n_ord_low
-63;
n_temp1 := trunc(n_temp
/10,
0);
n_temp1 := n_temp
-n_temp1
*10;
IF n_temp1
=0 THEN
n_temp1 := 10;
END IF;
--DBMS_OUTPUT.PUT_LINE('n_temp = '||to_char(n_temp,'9999999'));
--DBMS_OUTPUT.PUT_LINE('n_temp1 = '||to_char(n_temp1,'9999999'));
CASE
WHEN n_temp
<11 THEN
n_temp1 := get_py_index_01(n_temp1,n_ord_low);
WHEN n_temp
<21 THEN
n_temp1 := get_py_index_02(n_temp1,n_ord_low);
WHEN n_temp
<31 THEN
n_temp1 := get_py_index_03(n_temp1,n_ord_low);
WHEN n_temp
<41 THEN
n_temp1 := get_py_index_04(n_temp1,n_ord_low);
WHEN n_temp
<51 THEN
n_temp1 := get_py_index_05(n_temp1,n_ord_low);
WHEN n_temp
<61 THEN
n_temp1 := get_py_index_06(n_temp1,n_ord_low);
WHEN n_temp
<71 THEN
n_temp1 := get_py_index_07(n_temp1,n_ord_low);
WHEN n_temp
<81 THEN
n_temp1 := get_py_index_08(n_temp1,n_ord_low);
WHEN n_temp
<91 THEN
n_temp1 := get_py_index_09(n_temp1,n_ord_low);
WHEN n_temp
<101 THEN
n_temp1 := get_py_index_10(n_temp1,n_ord_low);
WHEN n_temp
<111 THEN
n_temp1 := get_py_index_11(n_temp1,n_ord_low);
WHEN n_temp
<121 THEN
n_temp1 := get_py_index_12(n_temp1,n_ord_low);
WHEN n_temp
<121 THEN
n_temp1 := get_py_index_13(n_temp1,n_ord_low);
ELSE
n_temp1 := 0;
END CASE;
v_PY := v_PY
||substr(GetHzPY_by_index(n_temp1),
1,
1);
END;
END CASE;
END IF;
END IF;
END LOOP;
RETURN v_PY;
--DBMS_OUTPUT.PUT_LINE(v_PY);
END GetHzPYCAP;
/
CREATE OR REPLACE FUNCTION FTGM.GetHzPY_by_index(
p_PY_Index number)
RETURN VARCHAR2 IS
v_PY_List THZPY_LIST := THZPY_LIST(
'a',
'aes',
'ai',
'an',
'ang',
'ao',
'ba',
'bai',
'baike',
'baiwa',
'ban',
'bang',
'bao',
'be',
'bei',
'ben',
'beng',
'bi',
'bia',
'bian',
'biao',
'bie',
'bin',
'bing',
'bo',
'bu',
'ca',
'cai',
'cal',
'can',
'cang',
'cao',
'ce',
'cen',
'ceng',
'ceok',
'ceom',
'ceon',
'ceor',
'cha',
'chai',
'chan',
'chang',
'chao',
'che',
'chen',
'cheng',
'chi',
'chong',
'chou',
'chu',
'chua',
'chuai',
'chuan',
'chuang',
'chui',
'chun',
'chuo',
'ci',
'cis',
'cong',
'cou',
'cu',
'cuan',
'cui',
'cun',
'cuo',
'da',
'dai',
'dan',
'dang',
'dao',
'de',
'defa',
'dei',
'deli',
'dem',
'den',
'deng',
'deo',
'di',
'dia',
'dian',
'diao',
'die',
'dim',
'ding',
'diu',
'dong',
'dou',
'du',
'duan',
'dug',
'dui',
'dul',
'dun',
'duo',
'e',
'ei',
'en',
'eng',
'eo',
'eol',
'eom',
'eos',
'er',
'fa',
'fan',
'fang',
'fei',
'fen',
'feng',
'fenwa',
'fiao',
'fo',
'fou',
'fu',
'fui',
'ga',
'gad',
'gai',
'gan',
'gang',
'gao',
'ge',
'gei',
'gen',
'geng',
'geo',
'geu',
'gib',
'go',
'gong',
'gongli',
'gou',
'gu',
'gua',
'guai',
'guan',
'guang',
'gui',
'gun',
'guo',
'ha',
'hai',
'hal',
'han',
'hang',
'hao',
'haoke',
'he',
'hei',
'hem',
'hen',
'heng',
'heui',
'ho',
'hol',
'hong',
'hou',
'hu',
'hua',
'huai',
'huan',
'huang',
'hui',
'hun',
'huo',
'hwa',
'hweong',
'i',
'ji',
'jia',
'jialun',
'jian',
'jiang',
'jiao',
'jie',
'jin',
'jing',
'jiong',
'jiu',
'jou',
'ju',
'juan',
'jue',
'jun',
'ka',
'kai',
'kal',
'kan',
'kang',
'kao',
'ke',
'keg',
'kei',
'kem',
'ken',
'keng',
'keo',
'keol',
'keop',
'keos',
'keum',
'ki',
'kong',
'kos',
'kou',
'ku',
'kua',
'kuai',
'kuan',
'kuang',
'kui',
'kun',
'kuo',
'kweok',
'kwi',
'la',
'lai',
'lan',
'lang',
'lao',
'le',
'lei',
'lem',
'len',
'leng',
'li',
'lia',
'lian',
'liang',
'liao',
'lie',
'lin',
'ling',
'liu',
'liwa',
'lo',
'long',
'lou',
'lu',
'luan',
'lue',
'lun',
'luo',
'lv',
'm',
'ma',
'mai',
'man',
'mang',
'mangmi',
'mao',
'mas',
'me',
'mei',
'men',
'meng',
'meo',
'mi',
'mian',
'miao',
'mie',
'min',
'ming',
'miu',
'mo',
'mol',
'mou',
'mu',
'myeo',
'myeon',
'myeong',
'n',
'na',
'nai',
'nan',
'nang',
'nao',
'ne',
'nei',
'nem',
'nen',
'neng',
'neus',
'ng',
'ngag',
'ngai',
'ngam',
'ni',
'nian',
'niang',
'niao',
'nie',
'nin',
'ning',
'niu',
'nong',
'nou',
'nu',
'nuan',
'nue',
'nun',
'nung',
'nuo',
'nv',
'nve',
'o',
'oes',
'ol',
'on',
'ou',
'pa',
'pai',
'pak',
'pan',
'pang',
'pao',
'pei',
'pen',
'peng',
'peol',
'phas',
'phdeng',
'phoi',
'phos',
'pi',
'pian',
'piao',
'pie',
'pin',
'ping',
'po',
'pou',
'ppun',
'pu',
'q',
'qi',
'qia',
'qian',
'qiang',
'qianke',
'qianwa',
'qiao',
'qie',
'qin',
'qing',
'qiong',
'qiu',
'qu',
'quan',
'que',
'qun',
'ra',
'ram',
'ran',
'rang',
'rao',
're',
'ren',
'reng',
'ri',
'rong',
'rou',
'ru',
'rua',
'ruan',
'rui',
'run',
'ruo',
'sa',
'saeng',
'sai',
'sal',
'san',
'sang',
'sao',
'se',
'sed',
'sei',
'sen',
'seng',
'seo',
'seon',
'sha',
'shai',
'shan',
'shang',
'shao',
'she',
'shei',
'shen',
'sheng',
'shi',
'shike',
'shiwa',
'shou',
'shu',
'shua',
'shuai',
'shuan',
'shuang',
'shui',
'shun',
'shuo',
'shw',
'si',
'so',
'sol',
'song',
'sou',
'su',
'suan',
'sui',
'sun',
'suo',
'ta',
'tae',
'tai',
'tan',
'tang',
'tao',
'tap',
'te',
'tei',
'teng',
'teo',
'teul',
'teun',
'ti',
'tian',
'tiao',
'tie',
'ting',
'tiu',
'tol',
'ton',
'tong',
'tou',
'tu',
'tuan',
'tui',
'tun',
'tuo',
'uu',
'wa',
'wai',
'wan',
'wang',
'wei',
'wen',
'weng',
'wie',
'wo',
'wu',
'xi',
'xia',
'xian',
'xiang',
'xiao',
'xie',
'xin',
'xing',
'xiong',
'xiu',
'xu',
'xuan',
'xue',
'xun',
'ya',
'yan',
'yang',
'yao',
'ye',
'yen',
'yi',
'yin',
'ying',
'yo',
'yong',
'you',
'yu',
'yuan',
'yue',
'yug',
'yun',
'za',
'zad',
'zai',
'zan',
'zang',
'zao',
'ze',
'zei',
'zen',
'zeng',
'zha',
'zhai',
'zhan',
'zhang',
'zhao',
'zhe',
'zhei',
'zhen',
'zheng',
'zhi',
'zhong',
'zhou',
'zhu',
'zhua',
'zhuai',
'zhuan',
'zhuang',
'zhui',
'zhun',
'zhuo',
'zi',
'zo',
'zong',
'zou',
'zu',
'zuan',
'zui',
'zun',
'zuo'
);
BEGIN
IF (p_PY_Index
>0)
AND (p_PY_Index
<527)
THEN
--RETURN INITCAP(v_PY_List(p_PY_Index));
RETURN v_PY_List(p_PY_Index);
ELSE
RETURN '';
END IF;
END GetHzPY_by_index;
/
转载于:https://www.cnblogs.com/siyunianhua/p/3830859.html
相关资源:oracle将汉字转换成拼音