通过Oracle函数SQL实现C# String.Format字符串格式化功能
语言国际化要求,开发上要求Oracle数据库SQL中对应的返回信息-Message,实现一个通用函数调用,比如:提示信息内容:条码123456当前工站在FCT!”,即通用的信息内容格式化标准为:“条码{0}当前工站在{1}!”。
在C#代码中可以通过String.Format函数占位符替换的模式实现字符串格式化输出,Oracle中暂无此函数,所以可参考String.Format反编译的相应的逻辑去实现即可;
信息内容中多个参数,是以占位符{}来表示,多个参数则用数组;通过自定义数组类型(即Table表结构类型).如下代码所示:
1 CREATE OR REPLACE TYPE stringarrary IS TABLE OF VARCHAR2 (4000);
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;

2 RETURN stringarrary
3 IS
4 j INT := 0;
5 i INT := 1;
6 len INT := 0;
7 len1 INT := 0;
8 str VARCHAR2 (4000);
9 returnvalue stringarrary := stringarrary ();
10 BEGIN
11 IF (spliter IS NULL) OR (SOURCE IS NULL)
12 THEN
13 returnvalue.EXTEND;
14 returnvalue (1) := SOURCE;
15 ELSE
16 len := LENGTH (SOURCE);
17 len1 := LENGTH (spliter);
18
19 WHILE j < len
20 LOOP
21 j := INSTR (SOURCE, spliter, i);
22
23 IF j = 0
24 THEN
25 j := len;
26 str := SUBSTR (SOURCE, i);
27 returnvalue.EXTEND;
28 returnvalue (returnvalue.COUNT) := str;
29
30 IF i >= len
31 THEN
32 EXIT;
33 END IF;
34 ELSE
35 str := SUBSTR (SOURCE, i, j - i);
36 i := j + len1;
37 returnvalue.EXTEND;
38 returnvalue (returnvalue.COUNT) := str;
39 END IF;
40 END LOOP;
41 END IF;
42
43 RETURN returnvalue;
44 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;

2 SOURCE VARCHAR2,
3 param VARCHAR2,
4 spliter VARCHAR2
5 )
6 RETURN VARCHAR2
7 IS
8 i INT := 0;
9 len INT := 0;
10 params stringarrary := stringarrary ();
11 returnvalue VARCHAR2 (4000);
12 BEGIN
13 params := stringsplit (param, spliter);
14
15 IF params.COUNT > 0
16 THEN
17 len := params.COUNT;
18 returnvalue := SOURCE;
19
20 WHILE i < len
21 LOOP
22 returnvalue :=
23 REPLACE (returnvalue,
24 CONCAT (CONCAT ('{', TO_CHAR (i)), '}'),
25 params (i + 1)
26 );
27 i := i + 1;
28 END LOOP;
29 END IF;
30
31 RETURN returnvalue;
32 END stringreplace;

SELECT StringFormat('条码{0}当前工站在{1}!', '123456|FCT', '|') FROM DUAL;
测试结果:
条码123456当前工站在FCT!
通过Oracle函数SQL实现C# String.Format字符串格式化功能的更多相关文章
- string.Format字符串格式化说明(转)
string.Format字符串格式化说明 www.111cn.net 编辑:Crese 来源:转载 先举几个简单的应用案例: 1.格式化货币(跟系统的环境有关,中文系统默认格式化人民币,英文系统 ...
- string.Format字符串格式化说明
1.格式化货币(跟系统的环境有关,中文系统默认格式化人民币,英文系统格式化美元) string.Format("{0:C}",0.2) 结果为:¥0.20 (英文操作系统结果:$0 ...
- string.Format()字符串格式化
Format()基本语法: {索引[,对齐][:格式字符串]} ·索引:表示引用的对象列表中的第n个对象参数. ·对齐(可选):设置宽度与对齐方式,该参数为带符号的整数.正数为 ...
- 前端自定义format函数,做字符串格式化功能
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Java中利用MessageFormat对象实现类似C# string.Format方法格式化
我们在写C#代码的时候常常会使用到string.Format("待格式化字符串{0},{1},....",参数1,参数2,...),来格式化字符串,特别是拼接字符的时候,这种方式使 ...
- String.Format数字格式化参考
String.Format数字格式化输出 {0:N2} {0:D2} {0:C2} (转) 数字 {0:N2} 12.36 数字 {0:N0} 13 货币 {0:c2} $12.36 货币 {0:c4 ...
- String.Format数字格式化输出 {0:N2} {0:D2} {0:C2} (转)
String.Format数字格式化输出 {:N2} {:D2} {:C2} (转) //格式为sring输出 // Label1.Text = string.Format("asdfads ...
- 第3.11节 Python强大的字符串格式化新功能:format字符串格式化的格式控制
第3.11节 format字符串格式化的格式控制 一. 引言 上节介绍了四种format进行字符串格式化的 ...
- python 之format字符串格式化
print函数之format字符串格式化方法的使用与学习笔记. 一.映射关系 (1)“映射”示例,以下通过位置举例说明: [+]Example_1: >>> print(" ...
随机推荐
- 1.Urllib2模块使用
网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地. Urllib2介绍: urllib2 是 Python2.7 自带的模块(不需要下载,导入即可使用) urllib2 官方文 ...
- YTU 2517: 打倒魔王↖(^ω^)↗
2517: 打倒魔王↖(^ω^)↗ 时间限制: 1 Sec 内存限制: 128 MB 提交: 231 解决: 112 题目描述 从前有一个王子,他喜欢上了邻国的一个公主.终于有一天他向公主表白了, ...
- ExecuteNonQuery()的用法
ExecuteNonQuery()的用法 下面我们将详细讲解如何在Page_Load()中对数据库的增加.删除.修改,最后我们再来总结一下ExecuteNonQuery(),ExecuteScalar ...
- 解决jQuery uploadify在非IE核心浏览器下无法上传
之前上传了一个通过Flash实现多文件上传,但是在IE正常运行,FireFox 不能正常上传.经过反复研究学习,之所以firefox和360浏览器无法正常运行,是因为FireFox.chrome.36 ...
- 洛谷 P1969 积木大赛 —— 水题
题目:https://www.luogu.org/problemnew/show/P1969 看每个高度和前面的关系即可. 代码如下: #include<iostream> #includ ...
- 利用Oracle内置分析函数进行高效统计汇总
分析函数是Oracle从8.1.6开始引入的一个新的概念,为我们分析数据提供了一种简单高效的处理方式.在分析函数出现以前,我们必须使用自联查询,子查询或者内联视图,甚至复杂的存储过程实现的语句,现 ...
- E2017E0605-hm
carbon copy 抄送, 抄写与送达 blind carbon copy 密送 blind adj. 失明的; 盲目的,轻率的; contact n. 接触; 触点 v 联系,接触; ...
- Akka源码分析-Cluster-ClusterClient
ClusterClient可以与某个集群通信,而本身节点不必是集群的一部分.它只需要知道一个或多个节点的位置作为联系节点.它会跟ClusterReceptionist 建立连接,来跟集群中的特定节点发 ...
- SQL 索引篇
索引介绍: 1.索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息. 数据库索引好比是一本书前面的目录, SQL Server的B树结构 2.加快数据库的查询速 ...
- DFS HDU 5305 Friends
题目传送门 /* 题意:每个点都要有偶数条边,且边染色成相同的两部分,问能有多少种染色方法 DFS+剪枝:按照边数来DFS,每种染色数为该点入度的一半,还有如果点不是偶数边就不DFS 这是别人的DFS ...