作者按,字符串分解在ORACLE编程中可用于词、字的解析,继而可实现单词搜索的合并,为基础代码。
代码如下,作者保留所有权。
create or replace function FUN_STRING_SPLIT ( v_string IN VARCHAR2, v_sep IN VARCHAR2) return fs.stringList IS /***************************************************************************/ /* */ /* 字符串分割函数 for ORACLE */ /* @param v_string 母字符串 */ /* @param v_sep 分隔符 */ /* @return 字符串列表 */ /* TYPE stringList IS TABLE OF VARCHAR2(256) INDEX BY BINARY_INTEGER; */ /* @author [email protected] */ /* All rights reserved. 未经许可,不得用于商业用途 */ /* */ /***************************************************************************/ --分隔符长度 C_LEN int; --删除空格后的字符串 v_str varchar2(256); --分隔符位置 v_pos int; --子字符串 v_sub varchar2(256); --数组计数器 v_i int; --结果 Result fs.stringList; BEGIN v_str := TRIM(v_string); --dbms_output.put_line(v_str); v_pos := INSTR(v_str, v_sep); v_i := 0; C_LEN := LENGTH(v_sep); --无匹配,整字符串返回 IF v_pos < 1 AND LENGTH(v_str) > 0 THEN Result(v_i) := v_str; return Result; END IF; WHILE v_pos > 0 LOOP v_sub := SUBSTR(v_str, 0, v_pos-1); --添加到结果数组 IF LENGTH(v_sub) > 0 THEN Result(v_i) := v_sub; v_i := v_i+1; END IF; --dbms_output.put_line(v_sub); v_str := SUBSTR(v_str, v_pos+C_LEN); --dbms_output.put_line(v_str); v_pos := INSTR(v_str, v_sep); END LOOP; --已无匹配,剩余字符串添加到结果数组 IF LENGTH(v_str) > 0 THEN Result(v_i) := v_str; END IF; --调试输出结果 dbms_output.put_line('列表项数量: '||result.count() ); dbms_output.put_line('--['||v_string||'] split by ['||v_sep||']--'); v_i := 0; FOR v_i IN 0..(result.count()-1) LOOP dbms_output.put_line('('||v_i||'): '||result(v_i) ); end loop; --返回结果数组 return Result; END FUN_STRING_SPLIT;
代码注释相当详细,不再对代码进行解释。
经测试,代码支持ORACLE 10及以上版本。
时间: 2024-10-12 08:21:20