一个字符串‘000023|@|000001|@|测试数据|@|CSSJ|@|身份证件号码|@|1|@|963852147|&|000025|@|000001|@|测|@|cs|@|123|@|1|@|456|’"|@|" 代表列间隔   ""&""代表行间隔我需要把截取出来的字符串添加到数据表中去,
有多少行就添加多少行!!

解决方案 »

  1.   

    这个到开发工具中去处理应该更容易
    比如.net中有split函数,直接就可以把这个字符串切割成数组,然后逐项处理
      

  2.   


    这个用java的前台函数split比oracle里面的instr方便多了啊!
      

  3.   

    我就是从开发工具中把字符串传入oracle中进行处理的!
    想有过程了实现!!!
      

  4.   

    仅供参考DECLARE
      V_SQL  VARCHAR2(20000);
      V_TEXT VARCHAR2(20000) := '000023|@|000001|@|测试数据|@|CSSJ|@|身份证件号码|@|1|@|963852147|&|000025|@|000001|@|测|@|cs|@|123|@|1|@|456';
    BEGIN
      V_SQL := 'INSERT INTO TABLE_NAME VALUS('' ';  V_TEXT := REPLACE(V_TEXT,
                        '|@|',
                        ''',''');
      DBMS_OUTPUT.PUT_LINE(V_TEXT);
      V_TEXT := REPLACE(V_TEXT,
                        '|&|',
                        ''');INSERT INTO TABLE_NAME VALUES(''');
      DBMS_OUTPUT.PUT_LINE(V_TEXT);
      V_SQL := V_SQL || V_TEXT || ''');';
      DBMS_OUTPUT.PUT_LINE(V_SQL);
      --EXECUTE IMMEDIATE V_SQL;
    END;
      

  5.   


    确实是简单,还有一种做法最好还是些一个split的function,这个网上g一把应该有很多的然后些一个procedure先用|&|做一次split,遍历得到的所有子串在对每个子串用|@|做split把得到的字串做为col放到一个行集里最后把行集out。
      

  6.   

    V_SQL  VARCHAR2(20000);  //?????????????????????
    oralce不是 varchar2 只能最大到 4000吗 ?  这个怎么回事啊 ?
      

  7.   

    你去google上找一个字符串分割的函数,就可以实现啦
      

  8.   


    我用的11G的
    可以支持到32767大小的varchar2
      

  9.   


    如果你的文本是规则的,就像你给出的例子
    通过将|@| 和 |&| 替换成相应的字符,如我给的例子。最后拼出oracle可以执行的insert语句。
    但是往往oracle中varchar2的大小是有限制的,我给只是一个思路而已,仅供参考。