Sql 在oracle中将字符串拆分为固定长度的记录
如何断开这样的字符串: BPR*D*895.11*CACHCTX*01*062001186*DA*2533167775*0011114**01*0210000089*DA*00077777*20150317*VEN~TRN*1*1234600*0987654321~~DTM*097*19980205~N1*PR*123轻松支付1*1*123000000~N3*1234大街~N4*圣路易斯*MO*631013736~~N1*PE*ABC公司 每个字符的固定长度为80个字符? --blob可以有空格,大小从80个字符到80000个字符,并且没有固定的分隔符Sql 在oracle中将字符串拆分为固定长度的记录,sql,oracle,plsql,Sql,Oracle,Plsql,如何断开这样的字符串: BPR*D*895.11*CACHCTX*01*062001186*DA*2533167775*0011114**01*0210000089*DA*00077777*20150317*VEN~TRN*1*1234600*0987654321~~DTM*097*19980205~N1*PR*123轻松支付1*1*123000000~N3*1234大街~N4*圣路易斯*MO*631013736~~N1*PE*ABC公司 每个字符的固定长度为80个字符? --blob可以有空格
多谢各位 您可以这样做:
with test as (
select 'vBPR*D*895.11*CACHCTX*01*062001186*DA*2533167775*0011111114**01*021000089*DA*0007777777*20150317*VEN~TRN*1*1234600*0987654321~~DTM*097*19980205~N1*PR*123 EASY PAY 1*1*123000000~N3*1234 MAIN STREET~N4*ST. LOUIS*MO*631013736~~N1*PE*ABC COMPANY' str
from dual
)
select regexp_substr(str, '(.{1,80})', 1, level) as chunks
from test
connect by level <= ceil(length(str)/80)
order by level;
begin
for i in (
with test as (
select 'vBPR*D*895.11*CACHCTX*01*062001186*DA*2533167775*0011111114**01*021000089*DA*0007777777*20150317*VEN~TRN*1*1234600*0987654321~~DTM*097*19980205~N1*PR*123 EASY PAY 1*1*123000000~N3*1234 MAIN STREET~N4*ST. LOUIS*MO*631013736~~N1*PE*ABC COMPANY' str
from dual
)
select regexp_substr(str, '(.{1,80})', 1, level) as chunks
from test
connect by level <= ceil(length(str)/80)
order by level
)
loop
dbms_output.put_line('chunk: ' || i.chunks);
-- do whatever INSERT you want with the value of i.chunks
end loop;
end;
你可以这样做:
with test as (
select 'vBPR*D*895.11*CACHCTX*01*062001186*DA*2533167775*0011111114**01*021000089*DA*0007777777*20150317*VEN~TRN*1*1234600*0987654321~~DTM*097*19980205~N1*PR*123 EASY PAY 1*1*123000000~N3*1234 MAIN STREET~N4*ST. LOUIS*MO*631013736~~N1*PE*ABC COMPANY' str
from dual
)
select regexp_substr(str, '(.{1,80})', 1, level) as chunks
from test
connect by level <= ceil(length(str)/80)
order by level;
begin
for i in (
with test as (
select 'vBPR*D*895.11*CACHCTX*01*062001186*DA*2533167775*0011111114**01*021000089*DA*0007777777*20150317*VEN~TRN*1*1234600*0987654321~~DTM*097*19980205~N1*PR*123 EASY PAY 1*1*123000000~N3*1234 MAIN STREET~N4*ST. LOUIS*MO*631013736~~N1*PE*ABC COMPANY' str
from dual
)
select regexp_substr(str, '(.{1,80})', 1, level) as chunks
from test
connect by level <= ceil(length(str)/80)
order by level
)
loop
dbms_output.put_line('chunk: ' || i.chunks);
-- do whatever INSERT you want with the value of i.chunks
end loop;
end;
谢谢你,马克。如果我必须单独插入这些块@罗山;更新后向您展示了如何在循环中单独使用这些值。感谢您的回答!谢谢你,马克。如果我必须单独插入这些块@罗山;更新后向您展示了如何在循环中单独使用这些值。感谢您的回答!谢谢你,特里吉特。例如,如果blob在任何时候少于80个字符,会发生什么情况?分解后的块需要插入到表中吗?谢谢Trijit。例如,如果blob在任何时候少于80个字符,会发生什么情况?分解的块需要插入到表中吗?