标签:数据 gre concat 返回 ring ret oop rac 条码
语言国际化要求,开发上要求Oracle数据库SQL中对应的返回信息-Message,实现一个通用函数调用,比如:提示信息内容:条码123456当前工站在FCT!”,即通用的信息内容格式化标准为:“条码{0}当前工站在{1}!”。
在C#代码中可以通过String.Format函数占位符替换的模式实现字符串格式化输出,Oracle中暂无此函数,所以可参考String.Format反编译的相应的逻辑去实现即可;
信息内容中多个参数,是以占位符{}来表示,多个参数则用数组;通过自定义数组类型(即Table表结构类型).如下代码所示:
FUNCTION---StringSplit(参数--信息内容,参数--分割符)
--分割函数CREATE OR REPLACE FUNCTION StringSplit ( SOURCE VARCHAR2, --信息内容 spliter VARCHAR2--分割符 ) RETURN stringarrary IS j INT := 0; i INT := 1; len INT := 0; len1 INT := 0; str VARCHAR2 (4000); returnvalue stringarrary := stringarrary (); BEGIN IF (spliter IS NULL) OR (SOURCE IS NULL) THEN returnvalue.EXTEND; returnvalue (1) := SOURCE; ELSE len := LENGTH (SOURCE); len1 := LENGTH (spliter); WHILE j < len LOOP j := INSTR (SOURCE, spliter, i); IF j = 0 THEN j := len; str := SUBSTR (SOURCE, i); returnvalue.EXTEND; returnvalue (returnvalue.COUNT) := str; IF i >= len THEN EXIT; END IF; ELSE str := SUBSTR (SOURCE, i, j - i); i := j + len1; returnvalue.EXTEND; returnvalue (returnvalue.COUNT) := str; END IF; END LOOP; END IF; RETURN returnvalue; END stringsplit;
1.分割函数测试如下:
SELECT * FROM TABLE (CAST (StringSplit (‘1|12|123|1234||12345|‘, ‘|‘) AS stringarrary));
结果:
COLUMN_VALUE
1
12
123
1234
12345
OK。
然后封装函数StringFormat:
CREATE OR REPLACE FUNCTION StringFormat (SOURCE VARCHAR2, param VARCHAR2, spliter VARCHAR2) RETURN VARCHAR2 IS i INT := 0; len INT := 0; params stringarrary := stringarrary (); returnvalue VARCHAR2 (4000); BEGIN params := stringsplit (param, spliter); IF params.COUNT > 0 THEN len := params.COUNT; returnvalue := SOURCE; WHILE i < len LOOP returnvalue := REPLACE (returnvalue, CONCAT (CONCAT (‘{‘, TO_CHAR (i)), ‘}‘), params (i + 1)); i := i + 1; END LOOP; END IF; RETURN returnvalue; END stringreplace;
SELECT StringFormat(‘条码{0}当前工站在{1}!‘, ‘123456|FCT‘, ‘|‘) FROM DUAL;
测试结果:
条码123456当前工站在FCT!
通过Oracle函数SQL实现C# String.Format字符串格式化功能
标签:数据 gre concat 返回 ring ret oop rac 条码
原文地址:https://www.cnblogs.com/turnip/p/11082700.html