求助ORACLE存储过程,懂的进来帮助,谢
我有两张表 PDM_Tob 主键:PDM_TobId PDM_Process 主键:Pdm_processid 字段Laminaid(用于存PDM_Top表的PDM_TobId ) 字段FormulaNO
PDM_Tob 有n条数据
现PDM_Process 可能有数据,也可能没数据,且PDM_Process的列FormulaNO数据要求是WW2009000004 ,2009 是当前年年份,000004是流水号。
现需要将PDM_Tob的n条数据插入PDM_Process
以下是我写的存储过程,但有点错误,请大家帮帮忙,急!!!明天要上机调试。。
create or replace procedure P_LeafProcessSameUpdate
is
v_count int;
v_i int;
v_tag varchar(200);
v_value varchar2(200);
v_len int;
begin
v_i:=1;
select count(*) into v_count from PDM_Tob ; //取出PDM_Tob 具体数据数量
select FormulaNO into v_value from PDM_Process
where rownum=1 order by FormulaNO desc; //将FormulNo 倒序后最大值取出来(这里有点错误,
就是无值时会出错)
if(v_value='') then //本意是:没有取到数据便将v_value 设为以下值。
begin
v_value:='WF'+to_char(sysdate,'yyyy')+'000001'; //这里可能有错,就是字符到数值转换错误
end;
end if;
while v_i<=v_count //设了循环,一条条数据插入,实在想不出好办法了。
loop
insert into PDM_Process(Pdm_processid,Laminaid,FormulaNO)
select sys_guid(),PDM_TobId,v_value from PDM_Tob where rownum=v_i ;
//rownum=v_i 就是为了取不同的数据
v_i:=v_i+1;
v_tag:=v_i;
v_len:=LENGTH(v_tag); //获取v_tag的长度
while(v_len<=(6-v_len)) //流水号的操作,不知道有没有好方法
loop
v_tag:='0'+v_tag;
v_len:=v_len+1;
end loop;
v_value:= 'WF'+to_char(sysdate,'yyyy')+v_tag //同样可能会出错
end loop;
end P_LeafProcessSameUpdate;
请高手帮帮忙,本机没有安装ORACLE数据库无法调试 谢谢!!!