您的位置:首页 > 数据库

在PL/SQL中如何实现.NET的String.Format功能

2011-08-09 11:15 501 查看
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


结果显示:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: