如何用存储过程实现拼音检索任意字符

数据库 SQL Server
本文主要介绍了如何用存储过程结合汉字字典表实现快速检索的过程,希望能对您有所帮助。

首先我们介绍一下存储过程的参数,然后通过一个代码实例来介绍这一过程的实现。接下来我们就开始学习吧。

1. 存储过程

参数说明:

  • v_string 输入字符,支持任意字符
  • v_tablename 表名
  • v_fieldname 字段名
  • v_number 默认显示数量
  • outCursor 以游标的形式返回结果集

该实例的实现代码如下:

  1. create or replace procedure pro_pyquery(v_string In varchar2 default null,  
  2.  
  3. v_tablename In varchar2,v_fieldname in varchar2,v_number in number,  
  4.  
  5. outCursor out SYS_REFCURSOR)  
  6.  
  7. as  
  8.  
  9. lv_spell varchar2(2000);  
  10.  
  11. lv_temp string(32000);  
  12.  
  13. lv_char varchar2(100);  
  14.  
  15. --no_string exception;  
  16.  
  17. begin  
  18.  
  19. --if v_string is null then  
  20.  
  21. --raise no_string;  
  22.  
  23. --end if;  
  24.  
  25. lv_temp:='select distinct '||v_fieldname||' from '||v_tablename||' where ';  
  26.  
  27. for i In 1..length(v_string) loop  
  28.  
  29. lv_char:=substr(v_string,i,1);  
  30.  
  31. if upper(lv_char)='A' then  
  32.  
  33. lv_spell:='((substr('||v_fieldname||','||i||',1) in (select hzmc from hzzd where hzszm=''A''))  
  34.  
  35. or (substr(lower('||v_fieldname||'),'||i||',1)=''a'')) and rownum<='||v_number;  
  36.  
  37. end if;  
  38.  
  39. if upper(lv_char)='B' then  
  40.  
  41. lv_spell:='((substr('||v_fieldname||','||i||',1) in (select hzmc from hzzd where hzszm=''B''))  
  42.  
  43. or (substr(lower('||v_fieldname||'),'||i||',1)=''b'')) and rownum<='||v_number;  
  44.  
  45. end if;  
  46.  
  47. if upper(lv_char)='C' then  
  48.  
  49. lv_spell:='((substr('||v_fieldname||','||i||',1) in (select hzmc from hzzd where hzszm=''C''))  
  50.  
  51. or (substr(lower('||v_fieldname||'),'||i||',1)=''c'')) and rownum<='||v_number;  
  52.  
  53. end if;  
  54.  
  55. if upper(lv_char)='D' then  
  56.  
  57. lv_spell:='  
  58.  
  59. ((substr('||v_fieldname||','||i||',1) in (select hzmc from hzzd where hzszm=''D''))  
  60.  
  61. or (substr(lower('||v_fieldname||'),'||i||',1)=''d'')) and rownum<='||v_number;  
  62.  
  63. end if;  
  64.  
  65. if upper(lv_char)='E' then  
  66.  
  67. ( (substr('||v_fieldname||','||i||',1) in (select hzmc from hzzd where hzszm=''E''))  
  68.  
  69. or (substr(lower('||v_fieldname||'),'||i||',1)=''e'')) and rownum<='||v_number;  
  70.  
  71. end if;  
  72.  
  73. if upper(lv_char)='F' then  
  74.  
  75. lv_spell:='((substr('||v_fieldname||','||i||',1) in (select hzmc from hzzd where hzszm=''F''))  
  76.  
  77. or (substr(lower('||v_fieldname||'),'||i||',1)=''f'')) and rownum<='||v_number;  
  78.  
  79. end if;  
  80.  
  81. if upper(lv_char)='G' then  
  82.  
  83. lv_spell:='((substr('||v_fieldname||','||i||',1) in (select hzmc from hzzd where hzszm=''G''))  
  84.  
  85. or (substr(lower('||v_fieldname||'),'||i||',1)=''g'')) and rownum<='||v_number;  
  86.  
  87. end if;  
  88.  
  89. if upper(lv_char)='H' then  
  90.  
  91. lv_spell:='((substr('||v_fieldname||','||i||',1) in (select hzmc from hzzd where hzszm=''H''))  
  92.  
  93. or (substr(lower('||v_fieldname||'),'||i||',1)=''h'')) and rownum<='||v_number;  
  94.  
  95. end if;  
  96.  
  97. if upper(lv_char)='I' then  
  98.  
  99. lv_spell:='(substr(lower('||v_fieldname||'),'||i||',1)=''i'') and rownum<='||v_number;  
  100.  
  101. end if;  
  102.  
  103. if upper(lv_char)='J' then  
  104.  
  105. lv_spell:='((substr('||v_fieldname||','||i||',1) in (select hzmc from hzzd where hzszm=''J''))  
  106.  
  107. or (substr(lower('||v_fieldname||'),'||i||',1)=''j'')) and rownum<='||v_number;  
  108.  
  109. end if;  
  110.  
  111. if upper(lv_char)='K' then  
  112.  
  113. lv_spell:=' ((substr('||v_fieldname||','||i||',1) in (select hzmc from hzzd where hzszm=''K''))  
  114.  
  115. or (substr(lower('||v_fieldname||'),'||i||',1)=''k'')) and rownum<='||v_number;  
  116.  
  117. end if;  
  118.  
  119. if upper(lv_char)='L' then  
  120.  
  121. lv_spell:='((substr('||v_fieldname||','||i||',1) in (select hzmc from hzzd where hzszm=''L''))  
  122.  
  123. or (substr(lower('||v_fieldname||'),'||i||',1)=''l'')) and rownum<='||v_number;  
  124.  
  125. end if;  
  126.  
  127. if upper(lv_char)='M' then  
  128.  
  129. lv_spell:='((substr('||v_fieldname||','||i||',1) in (select hzmc from hzzd where hzszm=''M''))  
  130.  
  131. or (substr(lower('||v_fieldname||'),'||i||',1)=''m'')) and rownum<='||v_number;  
  132.  
  133. end if;  
  134.  
  135. if upper(lv_char)='N' then  
  136.  
  137. lv_spell:='((substr('||v_fieldname||','||i||',1) in (select hzmc from hzzd where hzszm=''N''))  
  138.  
  139. or (substr(lower('||v_fieldname||'),'||i||',1)=''n'')) and rownum<='||v_number;  
  140.  
  141. end if;  
  142.  
  143. if upper(lv_char)='O' then  
  144.  
  145. lv_spell:='((substr('||v_fieldname||','||i||',1) in (select hzmc from hzzd where hzszm=''O''))  
  146.  
  147. or  
  148.  
  149. (substr(lower('||v_fieldname||'),'||i||',1)=''o''))  
  150.  
  151. and rownum<='||v_number;  
  152.  
  153. end if;  
  154.  
  155. if upper(lv_char)='P' then  
  156.  
  157. lv_spell:='((substr('||v_fieldname||','||i||',1) in (select hzmc from hzzd where hzszm=''P''))  
  158.  
  159. or  
  160.  
  161. (substr(lower('||v_fieldname||'),'||i||',1)=''p''))  
  162.  
  163. and rownum<='||v_number;  
  164.  
  165. end if;  
  166.  
  167. if upper(lv_char)='Q' then  
  168.  
  169. lv_spell:='((substr('||v_fieldname||','||i||',1) in (select hzmc from hzzd where hzszm=''Q''))  
  170.  
  171. or  
  172.  
  173. (substr(lower('||v_fieldname||'),'||i||',1)=''q''))  
  174.  
  175. and rownum<='||v_number;  
  176.  
  177. end if;  
  178.  
  179. if upper(lv_char)='R' then  
  180.  
  181. lv_spell:='((substr('||v_fieldname||','||i||',1) in (select hzmc from hzzd where hzszm=''R''))  
  182.  
  183. or  
  184.  
  185. (substr(lower('||v_fieldname||'),'||i||',1)=''r''))  
  186.  
  187. and rownum<='||v_number;  
  188.  
  189. end if;  
  190.  
  191. if upper(lv_char)='S' then  
  192.  
  193. lv_spell:='((substr('||v_fieldname||','||i||',1) in (select hzmc from hzzd where hzszm=''S''))  
  194.  
  195. or  
  196.  
  197. (substr(lower('||v_fieldname||'),'||i||',1)=''s''))  
  198.  
  199. and rownum<='||v_number;  
  200.  
  201. end if;  
  202.  
  203. if upper(lv_char)='T' then  
  204.  
  205. lv_spell:='((substr('||v_fieldname||','||i||',1) in (select hzmc from hzzd where hzszm=''T''))  
  206.  
  207. or  
  208.  
  209. (substr(lower('||v_fieldname||'),'||i||',1)=''t''))  
  210.  
  211. and rownum<='||v_number;  
  212.  
  213. end if;  
  214.  
  215. if upper(lv_char)='U' then  
  216.  
  217. lv_spell:='(substr(lower('||v_fieldname||'),'||i||',1)=''u'') and rownum<='||v_number;  
  218.  
  219. end if;  
  220.  
  221. if upper(lv_char)='V' then  
  222.  
  223. --open outCursor for select * from dual where 1=2;  
  224.  
  225. lv_spell:='(substr(lower('||v_fieldname||'),'||i||',1)=''v'')  
  226.  
  227. and rownum<='||v_number;  
  228.  
  229. end if;  
  230.  
  231. if upper(lv_char)='W' then  
  232.  
  233. lv_spell:='((substr('||v_fieldname||','||i||',1) in (select hzmc from hzzd where hzszm=''W''))  
  234.  
  235. or (substr(lower('||v_fieldname||'),'||i||',1)=''w'')) and rownum<='||v_number;  
  236.  
  237. end if;  
  238.  
  239. if upper(lv_char)='X' then  
  240.  
  241. lv_spell:='((substr('||v_fieldname||','||i||',1) in (select hzmc from hzzd where hzszm=''X''))  
  242.  
  243. or (substr(lower('||v_fieldname||'),'||i||',1)=''x'')) and rownum<='||v_number;  
  244.  
  245. end if;  
  246.  
  247. if upper(lv_char)='Y' then  
  248.  
  249. lv_spell:='((substr('||v_fieldname||','||i||',1) in (select hzmc from hzzd where hzszm=''Y''))  
  250.  
  251. or  
  252.  
  253. (substr(lower('||v_fieldname||'),'||i||',1)=''y''))  
  254.  
  255. and rownum<='||v_number;  
  256.  
  257. end if;  
  258.  
  259. if upper(lv_char)='Z' then  
  260.  
  261. lv_spell:='((substr('||v_fieldname||','||i||',1) in (select hzmc from hzzd where hzszm=''Z''))  
  262.  
  263. or (substr(lower('||v_fieldname||'),'||i||',1)=''z'')) and rownum<='||v_number;  
  264.  
  265. end if;  
  266.  
  267. if ascii(upper(lv_char))>90 or ascii(upper(lv_char))<65 then  
  268.  
  269. lv_spell:='substr('||v_fieldname||','||i||',1)='''||lv_char||''' and rownum<='||v_number;  
  270.  
  271. end if;  
  272.  
  273. lv_templv_temp:=lv_temp||lv_spell;  
  274.  
  275. if i<length(v_string) then  
  276.  
  277. lv_templv_temp:=lv_temp||' and ';  
  278.  
  279. end if;  
  280.  
  281. end loop;  
  282.  
  283. open outCursor for lv_temp;  
  284.  
  285. /*exception  
  286.  
  287. when no_string then  
  288.  
  289. --raise_application_error(-20001,'您未输入任何字符');  
  290.  
  291. open outCursor for select * from dual where 1=2;  
  292.  
  293. rollback;*/  
  294.  
  295. exception  
  296.  
  297. when others then  
  298.  
  299. lv_spell:='select distinct '||v_fieldname||' from '||v_tablename||' where rownum<='||v_number;  
  300.  
  301. open outCursor for lv_spell;  
  302.  
  303. rollback;  
  304.  
  305. end; 

2.汉字字典表

如何用存储过程实现拼音检索任意字符

 本文就介绍到这里,希望通过上面的这个例子能够给各位带来一些收获,谢谢大家!

【编辑推荐】

  1. Java和Ibatis调用存储过程并取得返回值详解
  2. 一个SQLite数据库修改和删除数据的代码实例
  3. 查询数据量大时,关联表查询与循环查询哪个更好
  4. 一个SQLite数据库的ORDER BY和GROUP BY代码实例
  5. 利用PL/SQLDeveloper将CSV数据导入ORACLE对应表中
责任编辑:赵鹏 来源: CSDN博客
相关推荐

2010-04-16 11:03:02

Oracle存储过程

2010-09-09 10:32:24

SQL函数拼音

2010-06-18 10:34:38

SQL Server

2010-09-03 15:08:03

SQLselect语句

2011-03-15 14:26:23

iptablesNAT

2011-03-15 09:10:47

iptablesNAT

2023-09-27 09:39:08

Java优化

2021-11-29 08:50:57

Javascript存储函数

2009-09-17 10:27:55

linq存储过程

2011-08-11 14:35:47

SQL Server插入更新

2010-04-29 17:31:56

Oracle存储过程

2024-02-26 08:05:00

Pythonpypinyin开发

2011-04-15 10:56:22

2010-11-29 09:12:46

sybase分页存储过

2020-05-09 10:38:31

Python透视表数据

2011-09-02 09:51:21

2022-12-13 08:39:53

Kafka存储检索

2010-11-26 13:27:41

MySQL存储过程

2011-05-16 13:15:55

MySQL存储字符集

2010-09-14 10:36:23

sql server存
点赞
收藏

51CTO技术栈公众号