下面的代码能实现NUMBER类型变量PRODUCTIONID自动增长,
如果修改成VARCHAR2(20)类型,如何实现自动增长?--表PROJECT_MANAGE的PRODUCTIONID列设置为自动增长列
-- [1]创建数据表
create table PROJECT_MANAGE
(
  --NUMBER类型能自动增长,修改成VARCHAR2类型如何自动增长???
  PRODUCTIONID NUMBER(10) not null,
 
  NAME         VARCHAR2(20) not null,
  REMARK       VARCHAR2(50)
)--[2]创建一个序列
create   sequence   AUTO_ADD 
increment   by   1     
start   with    1    
nomaxvalue      
nocache       --[3]创建一个触发器
create or replace trigger myProject     
before insert on PROJECT_MANAGE      
for each row 
begin 
if (:new.PRODUCTIONID is null) then      
    select AUTO_ADD.nextval into :new.PRODUCTIONID from dual;   
end if; 
end;--[4]插入记录
Insert into PROJECT_MANAGE
(NAME,REMARK)
Values
('姓名','备注说明')

解决方案 »

  1.   

    oracle会自动将number转换成varchar2
      

  2.   

    不需要改,定义为NUMBER和varchar2都是一样的效果
      

  3.   

    会自动将number型转化为varchar2
      

  4.   

    实际创建的表结构是,想实现PRODUCTIONID自动增长。create table PROJECT_MANAGE
    (
      PRODUCTIONID VARCHAR2(20) not null, 
      NAME         VARCHAR2(20) not null,
      REMARK       VARCHAR2(50)
    )
      

  5.   


    1.建表
    create table project_manage(
      productionid VARCHAR2(20) not null,  
      name VARCHAR2(20) not null,
      res VARCHAR2(50));2.序列
    create sequence auto_add
    start with 10000
    increment by 10   
    nomaxvalue
    nocache3.触发器
    create or replace trigger myProject     
    before insert on project_manage      
    for each row 
    begin 
          if (to_char(:new.productionid) is null) then      
             select auto_add.nextval into :new.productionid from dual;   
          end if; 
    end;4.添加数据
    SQL> insert into project_manage(name,res)
      2  values('三峡工程','已经竣工');
    1 row insertedSQL> insert into project_manage(name,res)
      2  values('贵成铁路','马上动工');
    1 row insertedSQL> insert into project_manage(name,res)
      2  values('昆明新建机场','在建中...');
    1 row inserted添加数据时,没有报错,说明productionid成功添加了序列值,
    因为我们定义表时约束了not null;5.查看数据
    SQL> select * from project_manage;PRODUCTIONID         NAME                 REMARKS
    -------------------- -------------------- --------------------------------------------------
    10000                三峡工程             已经竣工
    10010                贵成铁路             马上动工
    10020                昆明新建机场         在建中...如我们所预测,sequence的number类型的数据别转换为了varchar2类型,
    因为PRODUCTIONID这一列是左对齐的,如果树数据类型的话它将右对齐;
    SQL> select 10010,to_char('10010') from dual;     10010 TO_CHAR('10010')
    ---------- ----------------
         10010 10010
      

  6.   

    -------------------------
    PRODUCTIONID类型是VARCHAR2,也可以自动增长。