Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在oracle中将字符串拆分为固定长度的记录_Sql_Oracle_Plsql - Fatal编程技术网

Sql 在oracle中将字符串拆分为固定长度的记录

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可以有空格

如何断开这样的字符串:

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个字符,并且没有固定的分隔符


多谢各位

您可以这样做:

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个字符,会发生什么情况?分解的块需要插入到表中吗?