create or replace type type_string_split_tab as table of varchar2(4000);
FUNCTION fun_split (p_string IN VARCHAR2, p_delimiter IN VARCHAR2)
RETURN type_string_split_tab
IS
--
int_j INT := 0;
int_i INT := 1;
int_string_length INT := 0;
int_delimiter_length INT := 0;
--
--
v_string VARCHAR2 (4000);
v_string_split type_string_split_tab;
BEGIN
v_string_split := type_string_split_tab ();
int_string_length := LENGTH (p_string);
int_delimiter_length := LENGTH (p_delimiter);
WHILE int_j < int_string_length
LOOP
int_j := INSTR (p_string, p_delimiter, int_i);
IF int_j = 0
THEN
int_j := int_string_length;
v_string := SUBSTR (p_string, int_i);
v_string_split.EXTEND;
v_string_split (v_string_split.COUNT) := v_string;
IF int_i >= int_string_length
THEN
EXIT;
END IF;
ELSE
v_string := SUBSTR (p_string, int_i, int_j - int_i);
int_i := int_j + int_delimiter_length;
v_string_split.EXTEND;
v_string_split (v_string_split.COUNT) := v_string;
END IF;
END LOOP;
RETURN v_string_split;
END;
FUNCTION fun_string_format (p_stringformat IN VARCHAR2,
p_stringvalue IN VARCHAR2)
RETURN VARCHAR2
IS
int_i INT := 0;
int_totalvalue INT := 0;
v_stringvalue_split type_string_split_tab;
v_repalcestring VARCHAR2 (1000);
BEGIN
v_stringvalue_split := fun_split (p_stringvalue, ',');
int_totalvalue := v_stringvalue_split.COUNT;
v_repalcestring := p_stringformat;
FOR i IN 0 .. int_totalvalue - 1
LOOP
v_repalcestring :=
REPLACE (v_repalcestring,
'{' || TO_CHAR (i) || '}',
v_stringvalue_split (i + 1));
END LOOP;
RETURN v_repalcestring;
END;
測試:
select FUN_STRING_FORMAT('{0}天氣如何呢?','今天') from dual
結果顯示: