在做项目的过程中,遇到有这样的一个需求,需要对一个字符串进行分割处理,如:字符串:“1,2,3,4,5,”,需要得到结果:1 2 3 4 5。于是我就写了一个存储过程来实现,存储过程如下:
CREATE OR REPLACE PROCEDURE T_MS_SplitString
(
t_Source IN VARCHAR2, --源字符串
t_Separator IN VARCHAR2, --分隔字符串
t_StrLeft OUT VARCHAR2, --分隔字符串左边的字符串
t_StrRight OUT VARCHAR2 --分隔字符串右边的字符串
)
AS
SeparatorLen NUMBER; --分隔符长度
CharIndex NUMBER; --分隔符起始位置
BEGIN
t_StrLeft := '';
t_StrRight := t_Source;
--函数:INSTR(t_Source, t_Separator);表示 t_Separator在t_Source第一次出现的位置
CharIndex := INSTR(t_Source, t_Separator);
IF CharIndex > 0
THEN
t_StrLeft := SUBSTR(t_Source,1,CharIndex -1);
SeparatorLen := LENGTH(t_Separator);
t_StrRight := SUBSTR(t_Source,CharIndex +SeparatorLen);
END IF;
END T_MS_SplitString;
调用代码如下:
--定义变量
Recipients NVARCHAR2(800);--短讯接收人员ID串
RecipientsValue NVARCHAR2(20);--短讯接收人员ID
--获取系统设置的短讯接收人员
SELECT ParamSet_Param9 INTO Recipients FROM T_BIM_PARAMSET;
--调用存储过程 T_MS_SplitString 分割字符串,取得短讯接收人员ID
WHILE Recipients IS NOT NULL
LOOP
T_MS_SplitString(Recipients, ',' ,RecipientsValue,Recipients); --T_MS_SplitString(源字符串,分割字符串,分割出来的字符值,剩余字符串值)
Dbms_Output.put_line(RecipientsValue); --输出值
END LOOP;