日期:2014-05-17  浏览次数:20792 次

求ORACLE存储过程,3Q~
本帖最后由 yo1949 于 2014-04-21 21:36:27 编辑
实现输入开始和结束号码,每个号码加1,循环结果等于结束号码时停止,同时把这组区间号码插入A表FPH字段,同时A表DWDM字段写入固定值"35"  ,DWMC字段写入固定值"云南"。
例如输入'00000001','00020000' 区间执行这个存储过程,这时起始号码往下循环加1,直到结果等于00020000后停止。00000001..00000002...00000003...00000004......00000005............

--A表结构--
create table A(
DWDM    VARCHAR2(20),
DWMC     VARCHAR2(40),
FPH      VARCHAR2(50));
------解决方案--------------------
create or replace procedure pro_insert_code(start_code in varchar2,
                                            end_code   in varchar2) is
  v_dwmc   varchar2(50) := '云南';
  v_dwdm   varchar2(50) := '35';
  v_length number;
  v_start  number;
  v_end    number;
begin
  select length(start_code) into v_length from dual;
  v_start := to_number(start_code);
  v_end   := to_number(end_code);
  for v_start in to_number(start_code) .. v_end loop
    insert into a
      (dwdm, dwmc, fph)
    values
      (v_dwdm, v_dwmc, lpad(v_start, v_length, '0'));
  end loop;
end;

在命令窗口调用:
exec pro_insert_code('00000001','00020000'); 

查询插入结果:
select * from a order by fph;

查询结果:

------解决方案--------------------
引用:
create or replace procedure pro_insert_code(start_code in varchar2,
                                            end_code   in varchar2) is
  v_dwmc   varchar2(50) := '云南';
  v_dwdm   varchar2(50) := '35';
  v_length number;
  v_start  number;
  v_end    number;
begin
  select length(start_code) into v_length from dual;
  v_start := to_number(start_code);
  v_end   := to_number(end_code);
  for v_start in to_number(start_code) .. v_end loop
    insert into a
      (dwdm, dwmc, fph)
    values
      (v_dwdm, v_dwmc, lpad(v_start, v_length, '0'));
  end loop;
end;

在命令窗口调用:
exec pro_insert_code('00000001','00020000'); 

查询插入结果: