Oracle 中文转拼音码

 1 --创建函数
 2 CREATE OR REPLACE FUNCTION F_PINYIN(P_NAME IN VARCHAR2) RETURN VARCHAR2 AS
 3 V_COMPARE VARCHAR2(100);
 4 V_RETURN VARCHAR2(4000);
 5 
 6 FUNCTION F_NLSSORT(P_WORD IN VARCHAR2) RETURN VARCHAR2 AS
 7 BEGIN
 8   RETURN NLSSORT(P_WORD, 'NLS_SORT=SCHINESE_PINYIN_M');
 9   END;
10   BEGIN
11 FOR I IN 1..LENGTH(P_NAME) LOOP
12 V_COMPARE := F_NLSSORT(SUBSTR(P_NAME, I, 1));
13 IF V_COMPARE >= F_NLSSORT('') AND V_COMPARE <= F_NLSSORT('') THEN
14 V_RETURN := V_RETURN || 'A';
15 ELSIF V_COMPARE >= F_NLSSORT('') AND V_COMPARE <= F_NLSSORT('簿') THEN
16 V_RETURN := V_RETURN || 'B';
17 ELSIF V_COMPARE >= F_NLSSORT('') AND V_COMPARE <= F_NLSSORT('') THEN
18 V_RETURN := V_RETURN || 'C';
19 ELSIF V_COMPARE >= F_NLSSORT('') AND V_COMPARE <= F_NLSSORT('') THEN
20 V_RETURN := V_RETURN || 'D';
21 ELSIF V_COMPARE >= F_NLSSORT('') AND V_COMPARE <= F_NLSSORT('') THEN
22 V_RETURN := V_RETURN || 'E';
23 ELSIF V_COMPARE >= F_NLSSORT('') AND V_COMPARE <= F_NLSSORT('') THEN
24 V_RETURN := V_RETURN || 'F';
25 ELSIF V_COMPARE >= F_NLSSORT('') AND V_COMPARE <= F_NLSSORT('') THEN
26 V_RETURN := V_RETURN || 'G';
27 ELSIF V_COMPARE >= F_NLSSORT('') AND V_COMPARE <= F_NLSSORT('') THEN
28 V_RETURN := V_RETURN || 'H';
29 ELSIF V_COMPARE >= F_NLSSORT('') AND V_COMPARE <= F_NLSSORT('') THEN
30 V_RETURN := V_RETURN || 'J';
31 ELSIF V_COMPARE >= F_NLSSORT('') AND V_COMPARE <= F_NLSSORT('') THEN
32 V_RETURN := V_RETURN || 'K';
33 ELSIF V_COMPARE >= F_NLSSORT('') AND V_COMPARE <= F_NLSSORT('') THEN
34 V_RETURN := V_RETURN || 'L';
35 ELSIF V_COMPARE >= F_NLSSORT('') AND V_COMPARE <= F_NLSSORT('') THEN
36 V_RETURN := V_RETURN || 'M';
37 ELSIF V_COMPARE >= F_NLSSORT('') AND V_COMPARE <= F_NLSSORT('') THEN
38 V_RETURN := V_RETURN || 'N';
39 ELSIF V_COMPARE >= F_NLSSORT('') AND V_COMPARE <= F_NLSSORT('') THEN
40 V_RETURN := V_RETURN || 'O';
41 ELSIF V_COMPARE >= F_NLSSORT('') AND V_COMPARE <= F_NLSSORT('') THEN
42 V_RETURN := V_RETURN || 'P';
43 ELSIF V_COMPARE >= F_NLSSORT('') AND V_COMPARE <= F_NLSSORT('') THEN
44 V_RETURN := V_RETURN || 'Q';
45 ELSIF V_COMPARE >= F_NLSSORT('') AND V_COMPARE <= F_NLSSORT('') THEN
46 V_RETURN := V_RETURN || 'R';
47 ELSIF V_COMPARE >= F_NLSSORT('') AND V_COMPARE <= F_NLSSORT('') THEN
48 V_RETURN := V_RETURN || 'S';
49 ELSIF V_COMPARE >= F_NLSSORT('') AND V_COMPARE <= F_NLSSORT('') THEN
50 V_RETURN := V_RETURN || 'T';
51 ELSIF V_COMPARE >= F_NLSSORT('') AND V_COMPARE <= F_NLSSORT('') THEN
52 V_RETURN := V_RETURN || 'W';
53 ELSIF V_COMPARE >= F_NLSSORT('') AND V_COMPARE <= F_NLSSORT('') THEN
54 V_RETURN := V_RETURN || 'X';
55 ELSIF V_COMPARE >= F_NLSSORT('') AND V_COMPARE <= F_NLSSORT('') THEN
56 V_RETURN := V_RETURN || 'Y';
57 ELSIF V_COMPARE >= F_NLSSORT('') AND V_COMPARE <= F_NLSSORT('') THEN
58 V_RETURN := V_RETURN || 'Z';
59 END IF;
60 END LOOP;
61 RETURN V_RETURN;
62 END;
63 
64 --测试
65 select F_PINYIN(中文) test from dual

 

posted @ 2018-08-11 00:35  Jarman  阅读(2346)  评论(0)    收藏  举报