오라클 사용자 정의 분할 기능
오라클은 분할 기능을 제공하지 않지만, 이 기능을 구현하기 위해 직접 함수를 생성할 수 있습니다. 예를 들어 "abc defg hijkl nmopqr stuvw xyz"와 같이 구분 기호는 공백이지만 공백 수는 가변적입니다.
소스 코드:
CREATE OR REPLACE TYPE ty_str_split IS TABLE OF VARCHAR2 (4000); CREATE OR REPLACE FUNCTION fn_var_split ( p_str IN VARCHAR2, p_delimiter IN VARCHAR2 ) RETURN ty_str_split IS j INT := 0; len INT := 0; str VARCHAR2 (4000); str_split ty_str_split := ty_str_split (); v_str VARCHAR2 (4000) := RTRIM (LTRIM (p_str, p_delimiter), p_delimiter); BEGIN len := LENGTH (v_str); WHILE len > 0 LOOP j := INSTR (v_str, p_delimiter, 1); IF j = 0 THEN str := SUBSTR (v_str, 1); len := 0; str_split.EXTEND; str_split (str_split.COUNT) := str; ELSE str := SUBSTR (v_str, 1, j - 1); v_str := LTRIM (LTRIM (v_str, str), p_delimiter); len := LENGTH (v_str); str_split.EXTEND; str_split (str_split.COUNT) := str; END IF; END LOOP; RETURN str_split; END fn_var_split; /
테스트:
결과:
1 12 123 1234 12345
DECLARE CURSOR c IS SELECT * FROM TABLE (CAST (fn_var_split (';1;12;;123;;;1234;;;;12345;', ';') AS ty_str_split)); r c%ROWTYPE; BEGIN OPEN c; LOOP FETCH c INTO r; EXIT WHEN c%NOTFOUND; DBMS_OUTPUT.put_line (r.column_value); END LOOP; CLOSE c; END; /
읽어 주셔서 감사합니다. 도움이 되었으면 좋겠습니다. 감사합니다. 귀하의 검토를 위해 사이트 지원을 부탁드립니다!
더 많은 Oracle 사용자 정의 분할 함수 예제 및 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!