//oracle 循环插入数据 procedure Insert_WData( p_CODE1 ao_model.code1%type, p_BRANDID ao_model.brandid%type, p_CODE varchar2, p_CONF_VAL varchar2, p_DESC varchar2, p_CODE2 varchar2, p_DESC varchar2, ErrOut in out varchar2) is begin --参数 declare startposition1 number(10); len1 number(10); startposition2 number(10); len2 number(10); startposition3 number(10); len3 number(10); output1 varchar2(1024); output2 varchar2(1024); output3 varchar2(1024); num number(1); begin startposition1 := 1; startposition2 := 1; startposition3 := 1; loop select instr(p_CODE, ‘|‘, startposition1) into len1 from dual; select instr(p_CONF_VAL, ‘|‘, startposition2) into len2 from dual; select instr(p_DESC, ‘|‘, startposition3) into len3 from dual; if len1 != 0 then begin select substr(p_CODE, startposition1, len1 - startposition1) into output1 from dual; select substr(p_CONF_VAL, startposition2, len2 - startposition2) into output2 from dual; select substr(p_DESC, startposition3, len3 - startposition3) into output3 from dual; num := 0; select count(*) into num from ao_model a where a.c0084_brandid = p_BRANDID and a.c0001_code1 = p_CODE1 and a.c0001_code = output1; if num >= 1 then update ao_model b set b.conf_val = output2 where b.c0084_brandid = p_BRANDID and b.c0001_code1 = p_CODE1 and b.c0001_code = output1; else insert into ao_model (C0001_CODE1, C0084_BRANDID, C0001_CODE, CONF_VAL, DESC) values (p_CODE1, p_BRANDID, output1 || ‘‘, output2 || ‘‘, output3 || ‘‘); end if; commit; end; else begin select substr(p_CODE, startposition1) into output1 from dual; select substr(p_CONF_VAL, startposition2) into output2 from dual; select substr(p_DESC, startposition3) into output3 from dual; num := 0; select count(*) into num from ao_model a where a.c0084_brandid = p_BRANDID and a.c0001_code1 = p_CODE1 and a.c0001_code = output1; if num >= 1 then update ao_model b set b.conf_val = output2 where b.c0084_brandid = p_BRANDID and b.c0001_code1 = p_CODE1 and b.c0001_code = output1; else insert into ao_model (C0001_CODE1, C0084_BRANDID, C0001_CODE, CONF_VAL, DESC) values (p_CODE1, p_BRANDID, output1 || ‘‘, output2 || ‘‘, output3 || ‘‘); end if; commit; end; exit; end if; startposition1 := len1 + 1; startposition2 := len2 + 1; startposition3 := len3 + 1; end loop; end; EXCEPTION WHEN OTHERS THEN ErrOut := SQLERRM; rollback; end Insert_WParamStatusData;
原文:http://www.cnblogs.com/liupeipei/p/7833697.html