• PL/SQL 数独 九宫图 老猫


    drop table temp;
    create table temp(row_id   char(1), col_id   char(1),  rol_id   char(2), qty      varchar2(9), back_qty varchar2(9), set_qty  varchar2(9), rmk      char(1));

    begin
       delete from temp;
       for i in 1..9 loop
          for j in 1..9 loop
              insert into temp values(i,j,null,null,null,null,'N');
          end loop;
       end loop;
       update temp set qty = 9,rmk = 'Y'  where row_id = 1 and  col_id = 1;
       update temp set qty = 2,rmk = 'Y'  where row_id = 1 and  col_id = 3;
       update temp set qty = 8,rmk = 'Y'  where row_id = 1 and  col_id = 9;
       update temp set qty = 5,rmk = 'Y'  where row_id = 2 and  col_id = 2;
       update temp set qty = 3,rmk = 'Y'  where row_id = 2 and  col_id = 8;
       update temp set qty = 1,rmk = 'Y'  where row_id = 2 and  col_id = 9;
       update temp set qty = 9,rmk = 'Y'  where row_id = 3 and  col_id = 5;
       update temp set qty = 7,rmk = 'Y'  where row_id = 3 and  col_id = 6;
       update temp set qty = 1,rmk = 'Y'  where row_id = 4 and  col_id = 1;
       update temp set qty = 2,rmk = 'Y'  where row_id = 4 and  col_id = 5;
       update temp set qty = 4,rmk = 'Y'  where row_id = 4 and  col_id = 8;
       update temp set qty = 9,rmk = 'Y'  where row_id = 5 and  col_id = 3;
       update temp set qty = 3,rmk = 'Y'  where row_id = 5 and  col_id = 4;
       update temp set qty = 4,rmk = 'Y'  where row_id = 5 and  col_id = 6;
       update temp set qty = 7,rmk = 'Y'  where row_id = 5 and  col_id = 7;
       update temp set qty = 7,rmk = 'Y'  where row_id = 6 and  col_id = 2;
       update temp set qty = 1,rmk = 'Y'  where row_id = 6 and  col_id = 5;
       update temp set qty = 5,rmk = 'Y'  where row_id = 6 and  col_id = 9;
       update temp set qty = 8,rmk = 'Y'  where row_id = 7 and  col_id = 4;
       update temp set qty = 4,rmk = 'Y'  where row_id = 7 and  col_id = 5;
       update temp set qty = 6,rmk = 'Y'  where row_id = 8 and  col_id = 1;
       update temp set qty = 1,rmk = 'Y'  where row_id = 8 and  col_id = 2;
       update temp set qty = 8,rmk = 'Y'  where row_id = 8 and  col_id = 8;
       update temp set qty = 2,rmk = 'Y'  where row_id = 9 and  col_id = 1;
       update temp set qty = 1,rmk = 'Y'  where row_id = 9 and  col_id = 7;
       update temp set qty = 3,rmk = 'Y'  where row_id = 9 and  col_id = 9;
         
       update temp set rol_id = 1 where row_id <=3;
       update temp set rol_id = 2 where row_id > 3 and row_id <= 6;
       update temp set rol_id = 3 where row_id > 6 and row_id <= 9;
       
       update temp set rol_id = trim(rol_id) || 'A' where col_id <=3;
       update temp set rol_id = trim(rol_id) || 'B' where col_id > 3 and col_id <= 6;
       update temp set rol_id = trim(rol_id) || 'C' where col_id > 6 and col_id <= 9;   
    end ;

    create or replace view tmep_v
    as
    select row_id,sum(decode(col_id,1,qty,null)) col1,
                  sum(decode(col_id,2,qty,null)) col2,
                  sum(decode(col_id,3,qty,null)) col3,
                  sum(decode(col_id,4,qty,null)) col4,
                  sum(decode(col_id,5,qty,null)) col5,
                  sum(decode(col_id,6,qty,null)) col6,
                  sum(decode(col_id,7,qty,null)) col7,
                  sum(decode(col_id,8,qty,null)) col8,
                  sum(decode(col_id,9,qty,null)) col9
    from temp where row_id = 1 group by row_id
    union all
    select row_id,sum(decode(col_id,1,qty,null)) ,
                  sum(decode(col_id,2,qty,null)) ,
                  sum(decode(col_id,3,qty,null)) ,
                  sum(decode(col_id,4,qty,null)) ,
                  sum(decode(col_id,5,qty,null)) ,
                  sum(decode(col_id,6,qty,null)) ,
                  sum(decode(col_id,7,qty,null)) ,
                  sum(decode(col_id,8,qty,null)) ,
                  sum(decode(col_id,9,qty,null))
    from temp where row_id = 2 group by row_id
    union all
    select row_id,sum(decode(col_id,1,qty,null)) ,
                  sum(decode(col_id,2,qty,null)) ,
                  sum(decode(col_id,3,qty,null)) ,
                  sum(decode(col_id,4,qty,null)) ,
                  sum(decode(col_id,5,qty,null)) ,
                  sum(decode(col_id,6,qty,null)) ,
                  sum(decode(col_id,7,qty,null)) ,
                  sum(decode(col_id,8,qty,null)) ,
                  sum(decode(col_id,9,qty,null))
    from temp where row_id = 3 group by row_id
    union all
    select row_id,sum(decode(col_id,1,qty,null)) ,
                  sum(decode(col_id,2,qty,null)) ,
                  sum(decode(col_id,3,qty,null)) ,
                  sum(decode(col_id,4,qty,null)) ,
                  sum(decode(col_id,5,qty,null)) ,
                  sum(decode(col_id,6,qty,null)) ,
                  sum(decode(col_id,7,qty,null)) ,
                  sum(decode(col_id,8,qty,null)) ,
                  sum(decode(col_id,9,qty,null))
    from temp where row_id = 4 group by row_id
    union all
    select row_id,sum(decode(col_id,1,qty,null)) ,
                  sum(decode(col_id,2,qty,null)) ,
                  sum(decode(col_id,3,qty,null)) ,
                  sum(decode(col_id,4,qty,null)) ,
                  sum(decode(col_id,5,qty,null)) ,
                  sum(decode(col_id,6,qty,null)) ,
                  sum(decode(col_id,7,qty,null)) ,
                  sum(decode(col_id,8,qty,null)) ,
                  sum(decode(col_id,9,qty,null))
    from temp where row_id = 5 group by row_id
    union all
    select row_id,sum(decode(col_id,1,qty,null)) ,
                  sum(decode(col_id,2,qty,null)) ,
                  sum(decode(col_id,3,qty,null)) ,
                  sum(decode(col_id,4,qty,null)) ,
                  sum(decode(col_id,5,qty,null)) ,
                  sum(decode(col_id,6,qty,null)) ,
                  sum(decode(col_id,7,qty,null)) ,
                  sum(decode(col_id,8,qty,null)) ,
                  sum(decode(col_id,9,qty,null))
    from temp where row_id = 6 group by row_id
    union all
    select row_id,sum(decode(col_id,1,qty,null)) ,
                  sum(decode(col_id,2,qty,null)) ,
                  sum(decode(col_id,3,qty,null)) ,
                  sum(decode(col_id,4,qty,null)) ,
                  sum(decode(col_id,5,qty,null)) ,
                  sum(decode(col_id,6,qty,null)) ,
                  sum(decode(col_id,7,qty,null)) ,
                  sum(decode(col_id,8,qty,null)) ,
                  sum(decode(col_id,9,qty,null))
    from temp where row_id = 7 group by row_id
    union all
    select row_id,sum(decode(col_id,1,qty,null)) ,
                  sum(decode(col_id,2,qty,null)) ,
                  sum(decode(col_id,3,qty,null)) ,
                  sum(decode(col_id,4,qty,null)) ,
                  sum(decode(col_id,5,qty,null)) ,
                  sum(decode(col_id,6,qty,null)) ,
                  sum(decode(col_id,7,qty,null)) ,
                  sum(decode(col_id,8,qty,null)) ,
                  sum(decode(col_id,9,qty,null))
    from temp where row_id = 8 group by row_id
    union all
    select row_id,sum(decode(col_id,1,qty,null)) ,
                  sum(decode(col_id,2,qty,null)) ,
                  sum(decode(col_id,3,qty,null)) ,
                  sum(decode(col_id,4,qty,null)) ,
                  sum(decode(col_id,5,qty,null)) ,
                  sum(decode(col_id,6,qty,null)) ,
                  sum(decode(col_id,7,qty,null)) ,
                  sum(decode(col_id,8,qty,null)) ,
                  sum(decode(col_id,9,qty,null))
    from temp where row_id = 9 group by row_id

    create or replace function f_set return number
    is
      v_qty   varchar2(9);   v       char(1);  v_count int;  v_row   int;
      function get_qty(i_row_id char,  i_col_id char,  i_rol_id char) return char is   
      begin
         v_qty := '123456789';
         for rec_1 in( select QTY from temp where row_id = i_row_id and rmk = 'Y'
                       union
                       select QTY from temp where col_id = i_col_id and rmk = 'Y'
                       union
                       select QTY from temp where rol_id = i_rol_id and rmk = 'Y'
                      ) loop
              v_qty :=  replace(v_qty,rec_1.qty,'');        
         end loop;   
         return v_qty;           
      end;
       
    begin
      v_row := 0;
      for rec_1 in (select * from temp where  rmk = 'N'   ) loop
          v_qty := get_qty(rec_1.row_id,rec_1.col_id,rec_1.rol_id);   
          update temp
             set qty = v_qty,
                 rmk = decode(length(v_qty),1,'Y',rmk)
           where row_id = rec_1.row_id and col_id = rec_1.col_id
             and nvl(qty,'AA') <> v_qty;
           if sql%found then
              v_row := v_row + 1;
           end if;
      end loop;
      
      for rec_1 in(select *from temp where rmk = 'N' ) loop
            for i in 1 .. length(rec_1.qty) loop
                v := substr(rec_1.qty,i,1);            
                select count(*) into v_count from temp where row_id = rec_1.row_id
                and qty like '%'||v||'%';
                if v_count = 1 then
                   update temp
                      set qty = v,
                          rmk = 'Y'
                    where row_id = rec_1.row_id and col_id = rec_1.col_id;
                    if sql%found then
                       v_row := v_row + 1;
                    end if;
                    exit;
                end if;               
                select count(*) into v_count from temp where col_id  = rec_1.col_id
                and qty like '%'||v||'%';
                if v_count = 1 then
                   update temp
                      set qty = v,
                          rmk = 'Y'
                    where row_id = rec_1.row_id and col_id = rec_1.col_id;
                    if sql%found then
                       v_row := v_row + 1;
                    end if;
                    exit;
                end if;            
                select count(*) into v_count from temp where rol_id  = rec_1.rol_id
                and qty like '%'||v||'%';
                if v_count = 1 then
                   update temp
                      set qty = v,
                          rmk = 'Y'
                    where row_id = rec_1.row_id and col_id = rec_1.col_id;
                    if sql%found then
                       v_row := v_row + 1;
                    end if;
                    exit;
                end if;            
            end loop;
        end loop;
        return v_row;
    end;

  • 相关阅读:
    javaweb学习总结(二十九)——EL表达式
    javaweb学习总结(二十)——JavaBean总结
    Js_闭包详解
    JDBC各种数据库连接URL关键代码
    Jquery Table 的基本操作
    浅谈HTTP中Get与Post的区别
    hibernate一级缓存和二级缓存的区别
    SQL删除重复数据只保留一条
    数据库事务的隔离级别
    完全卸载oracle11g
  • 原文地址:https://www.cnblogs.com/oldcat/p/2171985.html
Copyright © 2020-2023  润新知