标题:求助ORACLE存储过程,懂的进来帮助,谢
取消只看楼主
linweihong
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2008-6-6
 问题点数:0 回复次数:0 
求助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数据库无法调试  谢谢!!!
搜索更多相关主题的帖子: ORACLE 
2009-12-23 21:44



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-294193-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.202457 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved