请教各位大虾个问题呀,关于Oracle循环的设置问题:
现有表E有字段A,字段B,字段C,现在想写一个存储过程,使得字段A循环插入100条数据不重复,字段B始终在1~~~5之间循环,字段C始终aaaa~~~~~~zzzz之间循环。
自己这个设置了很长时间都不成功,老是会产生笛卡尔积的问题。
请问这个循环应该怎样设置呀??create table E
(
  A INTEGER,
  B VARCHAR2(50),
  C NUMBER
)

解决方案 »

  1.   

    SELECT ROWNUM,MOD(ROWNUM,5) + 1,rpad(chr(ascii('a')+mod(rownum,26)),4,chr(ascii('a')+mod(rownum,26)))
    from dual connect by rownum <=100;
    这样子行不行,不用循环写了
      

  2.   

    是呀。可是实现数字的循环。
    可能字段C出现的形式是abcd~~~~~zxyz的形式??
      

  3.   

    谢谢呀。
    数字可以实现这样的功能。
    但是字段C的字母形式,能不能是想abcd~~~zxyz的形式呀??
      

  4.   

    SELECT ROWNUM,Nvl(MOD(ROWNUM-1,5),0)+1 FROM DUAL CONNECT BY ROWNUM < 100;
      

  5.   

    SELECT ROWNUM,MOD(ROWNUM-1,5)+1 FROM DUAL CONNECT BY ROWNUM < 100;
      

  6.   


    Select Level a,
           Mod(Level, 5) + 1 b,
           To_Char(Chr(97 + Trunc((Level - 1) / 26 / 26 / 26)) ||
                   Chr(97 + Trunc((Level - 1) / 26 / 26)) ||
                   Chr(97 + Trunc((Level - 1) / 26)) ||
                   Chr(96 + Decode(Mod(Level, 26), 0, 26, Mod(Level, 26)))) c
      From Dual
    Connect By Level < 101
    这个试试!!!
      

  7.   


    Select Level a,
           Mod(Level, 5) + 1 b,
           To_Char(
           Chr(97 + Decode(Mod(Trunc((Level - 1) /26/26/26), 26), 0, 0, Mod(Trunc((Level - 1) / 26/26/26), 26))) ||
           Chr(97 + Decode(Mod(Trunc((Level - 1) /26/26), 26), 0, 0, Mod(Trunc((Level - 1) / 26/26), 26))) ||
           Chr(97 + Decode(Mod(Trunc((Level - 1) / 26), 26), 0, 0, Mod(Trunc((Level - 1) / 26), 26))) ||
           Chr(96 + Decode(Mod(Level, 26), 0, 26, Mod(Level, 26)))
           ) c
      From Dual
    Connect By Level <= 5000
    这个好用了
      

  8.   

    create table E
    (
      A INTEGER,
      B VARCHAR2(50),
      C NUMBER
    )
    使得循环插入100条数据.字段A不重复,字段B始终在1~~~5之间循环,字段C始终aaaa~~~~~~zzzz之间循环。
    Select Level a,
           Mod(Level, 5) + 1 b,
           To_Char(
           Chr(97 + Decode(Mod(Trunc((Level - 1) /26/26/26), 26), 0, 0, Mod(Trunc((Level - 1) / 26/26/26), 26))) ||
           Chr(97 + Decode(Mod(Trunc((Level - 1) /26/26), 26), 0, 0, Mod(Trunc((Level - 1) / 26/26), 26))) ||
           Chr(97 + Decode(Mod(Trunc((Level - 1) / 26), 26), 0, 0, Mod(Trunc((Level - 1) / 26), 26))) ||
           Chr(96 + Decode(Mod(Level, 26), 0, 26, Mod(Level, 26)))
           ) c
      From Dual
    Connect By Level <= 5000