標籤:
作者按,字串分解在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及以上版本。
ORACLE編程的套路——字串分解