PLSQL在一条记录中以特定分隔符隔离的数据进行字符串拆分

文章作者 100test 发表时间 2007:10:15 12:56:12
来源 100Test.Com百考试题网


使用PLSQL实现在一条记录中以特定分隔符隔离的数据进行字符串拆分。T_ALLDEV表中的字段ALLDODEV中内容为“AAA,BB,CCC,DD,E”,T_ROUTDEF表中与该表数据一一对应,需要使用SEQID字段的内容,将ALLDODEV内容进行字符串拆分后,分成多条记录,插入T_SepDev表中。具体代码见详细内容。

DECLARE
CURSOR c_Tool IS --定义游标
SELECT T.PARTID,
T.ALLDODEV,
T.PRIDEV
FROM T_AllDev T.
rowCurTool c_Tool%rowtype.
iSeqid number.
vAllDev varchar2(255). --全标识字符串
vPriDev varchar2(255). --首选代码
iLength number.
iTimes number. --包含的个数
iCur number. --当前是第几个
vCurDev varchar2(255). --当前
vIsFirst varchar2(1). --是否首选
iSubLength number.
BEGIN
OPEN c_Tool.
FETCH c_Tool into rowCurTool.
while c_Tool%found loop
SELECT F.SEQID
into iSeqid
FROM T_ROUTDEF F
WHERE F.PRTNO = rowCurTool.PARTID.
vAllDev := rowCurTool.ALLDODEV.
vPriDev := rowCurTool.PRIDEV.
iLength := length(vAllDev).
0select length(vAllDev)-length(replace(vAllDev,’,’,null)) into iTimes from dual. --计算其中包含的个数
iTimes := iTimes 1.
iCur := 1.
iSubLength := 1.
while iCur <= iTimes loop
vCurDev := substr(vAllDev,1,instr(vAllDev,’,’,1,1)).
if iCur = iTimes then
iSubLength := 0.
else
iSubLength := length(vCurDev).
end if.
vAllDev := substr(vAllDev,iSubLength 1).
if iCur = iTimes then
vCurDev := vAllDev.
else
vCurDev := substr(vCurDev,1,length(vCurDev)-1).
end if.
IF vCurDev = vPriDev THEN
vIsFirst := ’1’.
ELSE
vIsFirst := ’0’.
END IF.
INSERT INTO T_SepDev(SEQID,
RESCODE,
ISFIRST)
VALUES(iSeqid,
vCurDev,
vIsFirst).
iCur := iCur 1.
end loop.
FETCH c_Tool into rowCurTool.
end loop.
CLOSE c_Tool.
END.

相关文章


Oracle中编译无效的对象常用方法
PLSQL在一条记录中以特定分隔符隔离的数据进行字符串拆分
细化解析Oracle数据库中的特权和角色
oracle服务启动停止方法
不能正常归档引起数据库挂起的解决方法
在示例数据库中启用Java
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛