oracle中多条数据添加的有关问题

oracle中多条数据添加的问题因为主键的原因,在里面写了个循环,写是写好了,可是传的参数,他不能识别,就是我

oracle中多条数据添加的问题
因为主键的原因,在里面写了个循环,写是写好了,可是传的参数,他不能识别,就是我传的这个P_ITEMID 参数是一个拼接的字符串,如‘12456’,‘54215’,‘54214’....!一次性传50条!为什么不能成功添加呢?求解~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~急用!!!!!!!!

create or replace procedure SP_Insert(
                                            P_ITEMID CHAR,
                                            P_NEWBARGROUPID CHAR,
                                            P_NEWBARID      CHAR,
                                            P_STATUS        CHAR,
                                            P_CREATEUSERID CHAR,
                                            P_CREATEDATE   DATE,
                                            NUM OUT NUMBER) AS
  SQLSTRING VARCHAR2(30000);
  NO        NUMBER;
  CURSOR C2 IS
  SELECT ITEMID,
          COMPANYID,
          RETAILID,
          ORIGINALBARGROUPID,
          ORIGINALBARID
      FROM (SELECT A.COMPANYID  AS COMPANYID,
                   A.RETAILID   AS RETAILID,
                   A.ITEMID     AS ITEMID,
                   A.BARGROUPID AS ORIGINALBARGROUPID,
                   A.BARID      AS ORIGINALBARID
              FROM  A
             WHERE A.LQT77_ITEMID IN (P_LQT72_ITEMID)
            UNION ALL
            


            SELECT B.ITEMID     ASITEMID,
                   B.COMPANYID  ASCOMPANYID,
                   B.RETAILID   ASRETAILID,
                   B.BARGROUPID ASORIGINALBARGROUPID,
                   B.BARID      ASORIGINALBARID
              FROM  B
             WHERE B.ITEMID IN (P_ITEMID));
  REC C2%ROWTYPE;
BEGIN

  OPEN C2;
  LOOP
    --循环开始
    FETCH C2
      INTO REC.ITEMID,
           REC.COMPANYID,
           REC.RETAILID,
           REC.ORIGINALBARGROUPID,
           REC.ORIGINALBARID;
    EXIT WHEN C2%NOTFOUND;
    IF (REC.ORIGINALBARGROUPID IS NULL) THEN
      REC.ORIGINALBARGROUPID := NULL;
    END IF;
    IF (REC.ORIGINALBARID IS NULL) THEN
      REC.ORIGINALBARID := NULL;
    END IF;
    SELECT COUNT(NO) INTO NO FROM STOREADJUSTHIS;
    IF NO1 = 0 THEN
      NO1 := 1;
    ELSE
      SELECT MAX(NO) INTO NO FROM STOREADJUSTHIS;
      NO1 := NO1 + 1;
    END IF;
  
    INSERT INTO STORE
      (NO1,
       COMPANYID,
       RETAILID,
       ITEMID,
       ORIGINALBARGROUPID,
       ORIGINALBARID,
       NEWBARGROUPID,
       NEWBARID,
       STATUS,
       DELETEDFLG,
       CREATEUSERID,
       CREATEDATE,
       UPDATEUSERID,
       UPDATEDATE)
    VALUES
      (NO,
       REC.COMPANYID,
       REC.RETAILID, 
       REC.ITEMID, 
       REC.ORIGINALBARGROUPID, 
       REC.ORIGINALBARID, 
       P_NEWBARGROUPID, 
       P_NEWBARID, 


       P_STATUS, 
       '00',
       P_CREATEUSERID,
       P_CREATEDATE, 
       P_CREATEUSERID,
       P_CREATEDATE 
       );
  
    COMMIT;
  END LOOP;
  CLOSE C2;
  IF SQL%ROWCOUNT = 0 THEN
    SELECT 0 INTO NUM FROM DUAL;
  ELSE
    SELECT 1 INTO NUM FROM DUAL;
  END IF;
END;
Oracle select
[解决办法]
上面那个过程如果传入字符就错了,应该用:

create or replace procedure p_test(str varchar2) is
begin

  for i in (with t1 as
               (select regexp_substr(str, '[^,]+', 1, level) a
                 from dual
               connect by level <= regexp_count(str, ',') + 1)
              select t.* from t_test t, t1 where t.a = t1.a) loop
    dbms_output.put_line(i.a);
  end loop;

end;