OPEN bomTableCursor;   
                            bom_loop:LOOP   
                                FETCH bomTableCursor INTO parentId11,childrenId11;   
                                IF cursorBomMark = 1 THEN  
                                    LEAVE bom_loop;      
                                else
                                        select childrenId11;
                                        select parentId11;
                                         # 查询原来的模板id。
                                         select t.part_template_id from part_template t where t.part_master_id = parentId11
                                            limit 1 into tempOriginalParentTemplateId ;                                         select t.part_template_id from part_template t where t.part_master_id = childrenId11
                                            limit 1 into tempOriginalChildTemplateId ;
                                            
                                        # 判断此次循环的父结点是否已经进行了升版。
                                        if not exists(select * from punlishTable t where t.oraginalMasterId = parentId11) then
                                            
                                            # 升级父结点的大版本并进行记录。
                                            insert into version(ver_seq_id,version,create_time,update_time)
                                                    values(1,'1',sysdate(),sysdate());
                                            insert into part(view_id,life_cycle_id,life_state_id,version_id,
                                                    type_id,creator,number,name,visibility,latest,small_latest,small_version,
                                                    create_time,update_time)
                                                    select t.view_id,t.life_cycle_id,t.life_state_id, @@IDENTITY,
                                                  t.type_id,t.creator,t.number,t.name,t.visibility,t.latest,t.small_latest,1,
                                                  sysdate(),sysdate()
                                                  from part t where t.master_id = parentId11
                                                  order by t.small_version desc
                                                  limit 1;
                                            
                                            set tempPartId = @@IDENTITY;
                                            
                                            update part t set t.master_id=tempPartId where t.part_id=tempPartId;
                                            
                                            #产生产品模板的新版本。
                                              insert into version(ver_seq_id,version,create_time,update_time)
                                                  values(1,'1',sysdate(),sysdate());
                
                                              insert into part_template(life_state_id,life_cycle_id,part_master_id,
                                                          number,name,version_id,type_id,master_id,creator,visibility,
                                                          trackable,serializable,latest,small_latest,small_version,
                                                          create_time,update_time)
                                                  select 1,null,tempPartId,
                                                          t.number,t.name,@@IDENTITY,t.type_id,null,t.creator,1,
                                                          1,1,1,1,1,
                                                          sysdate(),sysdate()
                                                  from part t
                                                          where t.master_id = parentId11
                                                          limit 1;
                                              
                                              set tempTemplateId = @@IDENTITY;
                                              update part_template t set t.master_id = tempTemplateId where t.part_template_id = tempTemplateId ;
                                              
                                              # 记录新升版的结点信息。
                                              insert into punlishTable(oraginalMasterId,newMasterId,newTemplateId)
                                                            values(parentId11,tempPartId,tempTemplateId);                                              
                                        end if;
                                        
                                        # 判断此次循环的子结点是否已经进行了升版。
                                        if not exists(select * from punlishTable t where t.oraginalMasterId = childrenId11) then
     
                                            # 升级子结点的大版本并进行记录。
                                            insert into version(ver_seq_id,version,create_time,update_time)
                                                    values(1,'1',sysdate(),sysdate());
                                            insert into part(view_id,life_cycle_id,life_state_id,version_id,
                                                    type_id,creator,number,name,visibility,latest,small_latest,small_version,
                                                    create_time,update_time)
                                                    select t.view_id,t.life_cycle_id,t.life_state_id, @@IDENTITY,
                                                  t.type_id,t.creator,t.number,t.name,t.visibility,t.latest,t.small_latest,1,
                                                  sysdate(),sysdate()
                                                  from part t where t.master_id = childrenId11
                                                  order by t.small_version desc
                                                  limit 1;
                                            
                                            set tempPartId = @@IDENTITY;
                                            
                                            update part t set t.master_id=tempPartId where t.part_id=tempPartId;
                                            
                                              
                                        end if;  
                                        
                                        # 获得新父子结点最新大版本的模板id。
                                        select newTemplateId from  punlishTable t where t.oraginalMasterId = parentId11  into tempParentTemplateId;
                                        select newTemplateId from  punlishTable t where t.oraginalMasterId = childrenId11  into tempChildTemplateId;
                                        
                                        # 获得原来版本的模板信息。
                                        insert into part_usage_link(use_part_id,used_master_id,part_type,
                                                                    effective,quantity,location,link_usage,
                                                                    create_time,update_time)
                                                      select tempParentTemplateId,tempChildTemplateId,t.part_type,
                                                                    t.effective,t.quantity,t.location ,t.link_usage,
                                                                    sysdate(),sysdate()
                                                      from part_usage_link t 
                                                      where t.use_part_id =tempOriginalParentTemplateId 
                                                        and t.used_master_id =tempOriginalChildTemplateId;
                                        if row_count() <=0 then 
                                          insert into part_usage_link(use_part_id,used_master_id,part_type,
                                                                      effective,quantity,location,link_usage,
                                                                      create_time,update_time)
                                                        select tempParentTemplateId,tempChildTemplateId,'cn.edu.sjtu.metro.model.part.PartTemplate',
                                                                      t.effective,t.quantity,t.location ,t.link_usage,
                                                                      sysdate(),sysdate()
                                                        from part_usage_link t 
                                                        where t.use_part_id =parentId11
                                                          and t.used_master_id =childrenId11;
                                        end if;
                              end if;             
                            END LOOP bom_loop;
                        CLOSE bomTableCursor;
游标没有进行循环,什么问题呢?
只循环了一次。

解决方案 »

  1.   

    这个cursorBomMark 变量是 判断游标循环的?在每个 有WHERE的SQL语句后面
    set cursorBomMark = 0
      

  2.   


    是用来判断游标循环的,在每个 有WHERE的SQL语句后面
    set cursorBomMark = 0
    这句话有什么作用呢?
      

  3.   

    这句话有什么作用呢?
    让循环继续下去IF cursorBomMark = 1 THEN 
     LEAVE bom_loop;
    ....
      

  4.   

    这句话有什么作用呢?
    让循环继续下去IF cursorBomMark = 1 THEN 
     LEAVE bom_loop;
    ....
      

  5.   

    这句话有什么作用呢?
    让循环继续下去IF cursorBomMark = 1 THEN 
     LEAVE bom_loop;
    ....
      

  6.   


    这个标记跟游标中的where条件有什么直接的关系吗。
    where条件怎么会影响到这个标记呢?
      

  7.   

    将你的 DECLARE CONTINUE HANDLER .... 贴出来看看
      

  8.   


     # 必须放在声明的游标的后面。
     DECLARE CONTINUE HANDLER FOR NOT FOUND SET cursorBomMark = 1;
      

  9.   

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET cursorBomMark = 1;
    任何1个SQL语句执行后,如果没有满足条件的记录时,会SET cursorBomMark = 1
      

  10.   

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET cursorBomMark = 1;
    任何1个SQL语句执行后,如果没有满足条件的记录时,会SET cursorBomMark = 1
      

  11.   

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET cursorBomMark = 1;
    任何1个SQL语句执行后,如果没有满足条件的记录时,会SET cursorBomMark = 1