1、确定记录只有3个‘,’号?如果是就用instr()函数分割后变成行,
  之后行变列插入DB;或者用分割后的数据分别union之后插入DB。
2、如果不确定逗号个数,建议用存储过程了,挺简单的。

解决方案 »

  1.   

    UNION的插入,如下:
        INSERT  INTO ...
       (...)   (SELECT ...
        FROM ...
        union 
        ...........
        ...........
        union 
        SELECT ...
        FROM ...
         )
      

  2.   

    如果是无限的逗号呢 不能用union写的啊
      

  3.   

    >如果是无限的逗号呢 不能用union写的啊
    写个后台处理吧!很简单。sql实现有点勉为其难了。
      

  4.   

    自定义一个表函数 f_sep(str, sep)select s.c from t, table(f_sep(str, ',')) s
      

  5.   

    select s.c from t, table(f_sep(t.str, ',')) s
      

  6.   

    CREATE OR REPLACE FUNCTION FUN_Divstr_forInsert(
    PI_str IN   VARCHAR2) --输入字符串
    RETURN VARCHAR2
    IS
        v_intPos INTEGER :=0;            --字符串截取表示符
        v_str VARCHAR2(100):= PI_str;    --输入字符赋给变量
        v_strSub VARCHAR2(10);           --截取的字符串BEGIN
         v_intPos:=instr(v_str,',');     --取得第一个表示符在字符串中的位置。
         WHILE v_intpos>0 LOOP           --判断为有效位置进行循环。          v_strsub:=substr(v_str,1,v_intPos-1);   --截取第一个字符串
              INSERT INTO TABLE_NAME                  --插入
              VALUES(v_strSub);
              
              v_str:=substr(v_str,v_intpos +1);       --截取剩余的字符串
              v_intPos:=instr(v_str,',');             --取得下一个表示符在字符串中的位置。          IF v_intpos = 0 AND v_str <> '' THEN    --如果是最后一个字符串并不为空就插入
                  INSERT INTO TABLE_NAME          
                  VALUES(v_strSub);
              END IF;    END LOOP;
      RETURN('0');
    END FUN_Divstr_forInsert;
      

  7.   

    怎么提示不能有DML操作呀
      

  8.   

    oracle的查询和更新语句中不允许有DML操作,所以最好是用过程或函数调用,tdaly(溜达溜达)的函数就可以用于直接调用,在其他过程或独立进程中调用FUNCTION FUN_Divstr_forInsert(
    PI_str),如果是多字段操作或更复杂操作,只要在他的函数基础上每个循环里增加其他逻辑运算或dml操作就可以了
      

  9.   

    如:begin
     FUN_Divstr_forInsert('a,b,c');
    end;
      

  10.   

    呵呵,错了,该这样
    declare
    str_ret varchar2(2);
    begin
     FUN_Divstr_forInsert('a,b,c');
    end;
      

  11.   

    ERROR 位于第 4 行:
    ORA-06550: 第 4 行, 第 2 列:
    PLS-00221: 'FUN_DIVSTR_FORINSERT' 不是过程或尚未定义
    ORA-06550: 第 4 行, 第 2 列:
    PL/SQL: Statement ignored
     还是不对呀
      

  12.   

    倒,刚才少写了东西,应该这样,刚才csdn不让我连续发了
    declare
    str_ret varchar2(2);
    begin
     str_ret := FUN_Divstr_forInsert('a,b,c');
    end;
      

  13.   

    tdaly(溜达溜达)给的函数最后一个数为什么插不到表中?
      

  14.   

    知道了
     IF v_intpos = 0 AND v_str <> '' THEN    --如果是最后一个字符串并不为空就插入
                  INSERT INTO TABLE_NAME          
                  VALUES(v_strSub);
              END IF;
    v_str <> '' 不对,应该是v_str is not null