在PL/SQL中如何實現.NET的String.Format功能


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

結果顯示:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章