在PLSQL中實現分割字串
阿新 • • 發佈:2019-02-10
首先在SQL視窗建立table型別變數,用來宣告函式返回的陣列型別:
/*變數型別宣告*/
CREATE OR REPLACE TYPE ty_str_split IS TABLE OF VARCHAR2 (4000);
/*函式*/ CREATE OR REPLACE FUNCTION fn_split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2) RETURN ty_str_split IS j INT := 0; i INT := 1; len INT := 0; len1 INT := 0; str VARCHAR2 (4000); str_split ty_str_split := ty_str_split (); BEGIN len := LENGTH (p_str); len1 := LENGTH (p_delimiter); WHILE j < len LOOP j := INSTR (p_str, p_delimiter, i); /*INSTR(x, find_string [, start] [, occurrence]);搜尋find_string在x中並返回它出現的位置*/ /*如果String2在String1中沒有找到,instr函式返回0*/ IF j = 0 THEN j := len; /*j等於待分割的字串最後一個位置*/ str := SUBSTR (p_str, i); /*str等於將待分割字串從i位置分割到結束位置*/ /*新增到陣列*/ str_split.EXTEND; str_split (str_split.COUNT) := str; /*陣列.count可以獲取到陣列實際長度*/ /*i代表待分割的字串開始分割的位置,len代表待分割字串長度或結束位置,如果待分割的字串開始分割的位置>=待分割字串長度或結束位置則分割結束,退出迴圈*/ IF i >= len THEN EXIT; END IF; ELSE str := SUBSTR (p_str, i, j - i); /*SUBSTR(x, start [, length]); 返回x的一個子開始於由start指定的位置。可選長度為子字串*/ /*i變成j+分割符長度的位置*/ i := j + len1; /*新增到陣列*/ str_split.EXTEND; str_split (str_split.COUNT) := str; END IF; END LOOP; RETURN str_split; END fn_split;
測試程式碼:
輸出:/*測試程式碼*/ declare -- Non-scalar parameters require additional processing s ty_str_split; len INTEGER; begin -- Call the function s := fn_split('1,2,3',','); len :=s.count; dbms_output.put_line('陣列長度:'||len); FOR i IN 1..len LOOP dbms_output.put_line(s(i)); END LOOP; end;
參考易百教程