嗯可以实现从A到Z的循环,想从A到ZZ只能自己动手编个函数了,
从A到Z如下:
--创建自增变量emp_sq、
create sequence emp_sq
minvalue 65    --最小值为65
maxvalue 90    ---最大值为90
start with 65   --起始值65
increment by 1  ---自增量1
cache 20
cycle   --可循环;使用chr(emp_sq.nextval)就变成从A到Z了
select chr(emp_sq.nextval) from dual

解决方案 »

  1.   

    嗯可以实现从A到Z的循环,想从A到ZZ只能自己动手编个函数了,
    ===========================================
    我是新手,这个函数不会写的帮我写一个呀,谢谢
      

  2.   

    oracle中怎样将字段建成象SQL2000中的ID自动+1的字段
     两种方法
    方法一:
      用触发器建一个序列
       create sequence a_seq increment by 1 start with 100;
    建一个触发器, 自动+1
    create or replace trigger your_seq_tri
    before insert on your_table1 for each row
    declare
      next_id number;
    begin
      select your_seq.nextval into next_id from dual;
      :new.id := next_id;
    end;
    方法二:
      建一个序列
         create sequence a_seq increment by 1 start with 100;
       在语句中+1
      insert into tbl(id,....)
         values (a_seq.nextval,....)
    另外: 自增字段可能会有跳序的情况。Oracle的序列在创建的时候有一个cache值是20,这样的话如果在使用的过程中重起过数据库的话,下一次就会从下一个20开始计数了!
    还有一种常见的情况,就是序列对于每个session(可以看成是一个连接)是相互不影响的,如果低一个连接里使用序列从1开始,同时第二个连接也在使用序列就会从21开始了,第一个连接在使用到20以后就会跳到41,如果41杯第三个连接使用了就会跳到61,等等这是cache为20的情况
    如果不信,可以同时打开两个sqlplus试试!
      

  3.   

    测试:
    A-Z 表示 0-25SQL> desc t;
     名称                                      空?      类型
     ----------------------------------------- -------- ----------------
     ID                                                 VARCHAR2(20)
     COLA  --创建一个序列 用于自增加
    SQL> create sequence seq_demo increment by 1 start with 1 maxvalue 999999999;序列已创建。已用时间:  00: 00: 00.20                                             VARCHAR2(20)
    --定义将数字转换成A-Z的函数
    SQL> create or replace function f_numtochr(num number)
      2  return varchar2  
      3  as 
      4  v_mod number;
      5  v_return varchar2(20);
      6  begin
      7  v_mod:=num; 
      8  while v_mod>0 loop  --循环处理生成每一个字符   
      9    v_return:=chr(mod(v_mod,26)+65)||v_return;
     10    v_mod:=trunc(v_mod/26);
     11  end loop;
     12  return v_return;
     13  end f_numtochr;
     14  /函数已创建。已用时间:  00: 00: 00.50--生成部分数据,测试
    SQL> begin
      2  for i in 1..30 loop
      3   insert into t(cola) values('a');
      4  end loop;
      5  end;
      6  /PL/SQL 过程已成功完成。已用时间:  00: 00: 00.50
    SQL> select * from t;ID                   COLA
    -------------------- ------------
    B                    a
    C                    a
    D                    a
    E                    a
    F                    a
    G                    a
    H                    a
    I                    a
    J                    a
    K                    a
    L                    aID                   COLA
    -------------------- ------------
    M                    a
    N                    a
    O                    a
    P                    a
    Q                    a
    R                    a
    S                    a
    T                    a
    U                    a
    V                    a
    W                    aID                   COLA
    -------------------- ------------
    X                    a
    Y                    a
    Z                    a
    BA                   a
    BB                   a
    BC                   a
    BD                   a
    BE                   a
    BF                   a
    BG                   a注意:A 表示0 ;B 表示1;
    因此 Z的下一个 应当是 BA,而不是AA!OK!
      

  4.   

    Oracle也不自己做一个自增字段, 像Sqlserver都可以做一个Indentity所以说Ms的东西用起来方便啦!!
      

  5.   

    在学习bzszp(SongZip)的基础上改了点东西,希望是楼主要的:
       create or replace function f_numtochr(num number)
      return varchar2  
      as 
      v_mod number;
      v_return varchar2(20);
      begin
      v_mod:=num; 
      while v_mod>0 loop  --循环处理生成每一个字符 
       if mod(v_mod,27) = 0 then 
        execute immediate 'select seq_demo.nextval from dual' into v_mod;
        end if;
        v_return:=chr(mod(v_mod,27)+64)||v_return;
        v_mod:=trunc(v_mod/27);
     end loop;
      return v_return;
      end f_numtochr;
    /SQL> create sequence seq_demo increment by 1 start with 1 maxvalue 999999999;Sequence created.SQL>    begin
      2     for i in 1..30 loop
      3     insert into aaaa values(f_numtochr(seq_demo.nextval));
      4     end loop;
      5     end;
      6  /PL/SQL procedure successfully completed.SQL> select * from aaaa;A
    -----
    A
    B
    C
    D
    E
    F
    G
    H
    I
    J
    KA
    -----
    L
    M
    N
    O
    P
    Q
    R
    S
    T
    U
    VA
    -----
    W
    X
    Y
    Z
    AA
    AB
    AC
    AD30 rows selected.
      

  6.   

    wfeng7907(无风)改进bzszp(SongZip)的方法后,在一个字段中可以按照A——ZZ变化。对不起,我没有说清楚,我真正想实现的效果如下所示:当第1次向表中的NUM字段插入1时,其相应的STR字段自动变为:A
    当第2次向表中的NUM字段插入1时,其相应的STR字段自动变为:B
    当第3次向表中的NUM字段插入1时,其相应的STR字段自动变为:C
    当第4次向表中的NUM字段插入1时,其相应的STR字段自动变为:D
                      ……
    当第26次向表中的NUM字段插入1时,其相应的STR字段自动变为:Z
    当第27次向表中的NUM字段插入1时,其相应的STR字段自动变为:AA
    当第28次向表中的NUM字段插入1时,其相应的STR字段自动变为:AB
    当第29次向表中的NUM字段插入1时,其相应的STR字段自动变为:AC
                             ……
    当第52次向表中的NUM字段插入1时,其相应的STR字段自动变为:AZ
    当第53次向表中的NUM字段插入1时,其相应的STR字段自动变为:BA
    当第54次向表中的NUM字段插入1时,其相应的STR字段自动变为:BB
                             ……同理:
    当第1次向表中的NUM字段插入2时,其相应的STR字段自动变为:A
    当第2次向表中的NUM字段插入2时,其相应的STR字段自动变为:B
    当第3次向表中的NUM字段插入2时,其相应的STR字段自动变为:C
    当第4次向表中的NUM字段插入2时,其相应的STR字段自动变为:D
                      ……
    当第26次向表中的NUM字段插入2时,其相应的STR字段自动变为:Z
    当第27次向表中的NUM字段插入2时,其相应的STR字段自动变为:AA
    当第28次向表中的NUM字段插入2时,其相应的STR字段自动变为:AB
    当第29次向表中的NUM字段插入2时,其相应的STR字段自动变为:AC
                             ……
    当第52次向表中的NUM字段插入2时,其相应的STR字段自动变为:AZ
    当第53次向表中的NUM字段插入2时,其相应的STR字段自动变为:BA
    当第54次向表中的NUM字段插入2时,其相应的STR字段自动变为:BB
                             ……
    当第1次向表中的NUM字段插入3时,其相应的STR字段自动变为:A
                              ……
                              ……
                              ……
    ID记录号最大为ZZ
    举例如下:NUM   STR 
    1       A
    1       B
    1       C
    2       A
    2       B
    3       A
    1       D
    1       E
    2       C
      

  7.   

    建议楼主可以加一个数字列,不知道符不符合楼主的要求:
    create table a(a1 varchar2(4),num number,n number);   create or replace function f_numtochr(num number)
      return varchar2  
      as 
      v_mod number;
      v_return varchar2(20);
      begin
      v_mod:=num; 
      while v_mod>0 loop  --循环处理生成每一个字符 
       if mod(v_mod,27) = 0 then 
       v_mod:=v_mod+1;
        end if;
        v_return:=chr(mod(v_mod,27)+64)||v_return;
        v_mod:=trunc(v_mod/27);
     end loop;
      return v_return;
      end f_numtochr;
    /  create or replace procedure f_num(n number)
      return varchar2  
      as
      v_return varchar2(20);
      v_num  number;
      begin
      execute immediate 'select nvl(max(num),0) from a where n='||n into v_num;
      if mod(v_num+1,27) = 0 then
      v_num := v_num + 2;
      else
      v_num := v_num + 1;
      end if;
      insert into a values(f_numtochr(v_num),v_num,n);
      commit;
      end f_num;
    /
       begin
       for i in 1..30 loop
          f_num(2);
         end loop;
          end;
      /PL/SQL procedure successfully completedSQL> select * from a;A1          NUM          N
    ---- ---------- ----------
    B             2          1
    A             1          1
    C             3          1
    D             4          1
    E             5          1
    F             6          1
    G             7          1
    H             8          1
    I             9          1
    J            10          1
    K            11          1A1          NUM          N
    ---- ---------- ----------
    L            12          1
    M            13          1
    N            14          1
    O            15          1
    P            16          1
    Q            17          1
    R            18          1
    S            19          1
    T            20          1
    U            21          1
    V            22          1A1          NUM          N
    ---- ---------- ----------
    W            23          1
    X            24          1
    Y            25          1
    Z            26          1
    AA           28          1
    AB           29          1
    AC           30          1
    AD           31          130 rows selected.SQL>     begin
      2     for i in 1..30 loop
      3        f_num(2);
      4       end loop;
      5        end;
      6  /PL/SQL procedure successfully compSQL> select * from a;A1          NUM          N
    ---- ---------- ----------
    B             2          1
    A             1          1
    C             3          1
    D             4          1
    E             5          1
    F             6          1
    G             7          1
    H             8          1
    I             9          1
    J            10          1
    K            11          1A1          NUM          N
    ---- ---------- ----------
    L            12          1
    M            13          1
    N            14          1
    O            15          1
    P            16          1
    Q            17          1
    R            18          1
    S            19          1
    T            20          1
    U            21          1
    V            22          1A1          NUM          N
    ---- ---------- ----------
    W            23          1
    X            24          1
    Y            25          1
    Z            26          1
    AA           28          1
    AB           29          1
    AC           30          1
    AD           31          1
    A             1          2
    B             2          2
    C             3          2A1          NUM          N
    ---- ---------- ----------
    D             4          2
    E             5          2
    F             6          2
    G             7          2
    H             8          2
    I             9          2
    J            10          2
    K            11          2
    L            12          2
    M            13          2
    N            14          2A1          NUM          N
    ---- ---------- ----------
    O            15          2
    P            16          2
    Q            17          2
    R            18          2
    S            19          2
    T            20          2
    U            21          2
    V            22          2
    W            23          2
    X            24          2
    Y            25          2A1          NUM          N
    ---- ---------- ----------
    Z            26          2
    AA           28          2
    AB           29          2
    AC           30          2
    AD           31          260 rows selected.
      

  8.   

    先create table a(a1 varchar2(4),num number,n number);
    create or replace function f_numtochr(num number)
     create or replace procedure f_num(n number)然后
    begin
       for i in 1..30 loop
          f_num(2);
         end loop;
          end;上面提示:
    对象f_num无效
    这是怎么会事啊?
      

  9.   

    哦,sorry 应该是:
      create or replace procedure f_num(n number)
      as
      v_return varchar2(20);
      v_num  number;
      begin
      execute immediate 'select nvl(max(num),0) from a where n='||n into v_num;
      if mod(v_num+1,27) = 0 then
      v_num := v_num + 2;
      else
      v_num := v_num + 1;
      end if;
      insert into a values(f_numtochr(v_num),v_num,n);
      commit;
      end f_num;
      

  10.   

    还不正确
    上面提示:
    对象f_num无效谢谢
      

  11.   


    begin
       for i in 1..30 loop
          f_num(2);
         end loop;
          end;
    现在已测试成功了但我想插入一条数据该怎么写啊?
    这样写不对
     f_num(2);
      

  12.   

    f_num是一个过程,来满足你插入数据的功能,如果想插入一条数据,可以更改过程中的内容,
    例  
    create or replace procedure f_num(n number,a varchar2,b varchar2.....)
      as
      v_return varchar2(20);
      v_num  number;
      begin
      execute immediate 'select nvl(max(num),0) from a where n='||n into v_num;
      if mod(v_num+1,27) = 0 then
      v_num := v_num + 2;
      else
      v_num := v_num + 1;
      end if;
      insert into a values(f_numtochr(v_num),v_num,n,a,b.....);
      commit;
      end f_num;
      

  13.   

    这个我是知道的
    俺笨的让大家笑掉大牙啦
    我的意思是这样的下面的语句可以在表中添加30条记录
    begin
       for i in 1..30 loop
          f_num(2);
         end loop;
          end;现在我只想在表中添加一条记录
    该怎么写啊
      

  14.   

    begin
       for i in 1..1 loop
          f_num(2,'i7777i');
         end loop;
          end;这样也能添加一条记录,但感觉有点不对劲!
      

  15.   

    begin
    f_num(2);
    end;
    添加一条
      

  16.   

    数据库重起?这个排序是按照a表的num的数字序列排序的,数据库重起对他应该没有影响!
      

  17.   

    以上功能现在已经完全实现了
    上面的功能无非就是:
    当插入数据时,用A、B、C……表示插入相同字段的次数,这里是一个字段不过现在我又在表中多加了一个字段,用A、B、C……表示插入相同的两个字段的次数.
     f_num(2,'str');//传两个参数进去
    create table a(a1 varchar2(4),num number,n number,str varchar2(4));
    程序看不懂,请再帮忙把程序修改一下,谢谢啦
    不知道我上面描述的清楚吗,如果你不清楚可以问我呀,谢谢
      

  18.   

    用A、B、C……表示插入相同的两个字段的次数?
    不知道楼主指的是什么?