Oracle怎么让varchar类型自动增长

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle怎么让varchar类型自动增长相关的知识,希望对你有一定的参考价值。

比方说我一张表里的一个字段为varchar类型,我想按照一定的格式自动增长
例如:第一条为:SH11090010
第二条为:SH11090011
那么第三条插入时我想让它自动为:SH11090012

1、建用户数据表
     drop table dectuser;
     create table dectuser(
          userid integer primary key,  /*主键,自动增加*/
          name varchar2(20),
          sex varchar2(2)
          );
2、创建自动增长序列

     drop sequence dectuser_tb_seq;
     create sequence dectuser_tb_seq minvalue 1 maxvalue 99999999
              increment by 1
              start with 1;   /*步长为1*/
3、创建触发器
      create or replace trigger dectuser_tb_tri
         before insert on dectuser     /*触发条件:当向表dectuser执行插入操作时触发此触发器*/
         for each row                       /*对每一行都检测是否触发*/
         begin                                   /*触发器开始*/
                select dectuser_tb_seq.nextval into :new.userid from dual;   /*触发器主题内容,即触发后执行的动作,在此是取得序列dectuser_tb_seq的下一个值插入到表dectuser中的userid字段中*/
          end;
   
         /                                         /*退出sqlplus行编辑*/
4、提交
     commit;

     现在就完成了自增主键的设定,搞定!

参考技术A ...楼上的是用序列,楼主都说了,是VARCHAR类型的字符串.....
这个你可以写个存储过程,然后在每次新增的时候调用存储过程返回新增的数据.
参考技术B 用squence insert into taba (keyCol) select 'SH1109'|| lpad(squname.nextval||'',4,'0') from dual追问

这样会更好 insert into hos_hospitalcity values('SH0000000'||SEQ_HOS_HOSPITALCITY_HOSNO.Nextval,'yyyy','yyyy','1jjjj11')

追答

这个 长度不定的 'SH0000000'||SEQ_HOS_HOSPITALCITY_HOSNO.Nextval
9-10 ,99-100的变换都会增加一位长度

本回答被提问者采纳

怎么让SQLServer的逐渐自动增长呢?

SqlServer有3种方式设置自增列,

    SSMS中在图形化界面中建表时,设置自动增长的其实值及每次增量。

2. --语句建表时设置自增列,从1开始增长,每次增加1
create table test(col1 int indentity(1,1,))。

3. --修改列为从1开始增长,每次增加10
alter table test alter col1 int indentity(1,10)。

操作

    1、创建一个表 movie,设置字段 id 具有 identity(1,1),

    注:identity(start,step),中的参数start表示从start开始标号,step表示每次递增的步长数量

    2、当我们进行插入操作的时候,便会报如下的错误;

    注:mysql 上是可以这么操作的;

    3、解决方法是,在使用前添加一句

    SET IDENTITY_Insert movie ON;

    注:SET IDENTITY_Insert table switch 表示是否允许table表中的

    identity 字段的插入操作,On表示允许,Off表示不允许

    4、有时候为了安全性,会习惯性的在操作前,允许,操作后不允许:

    5、注:mssql 目前只允许同时只对一张表进行

    SET IDENTITY_Insert table ON;

    操作,所以如果考虑到在不同的表之间进行操作的话,

    需要先把前一张表给OFF 掉;

    identity值

    查看当前表的indentity的值:

    dbcc checkident(table, NORESEED)

    其中 table 表示的要查看的表, NORESEED表示不会修改该值,

    如下图查询到的结果是3

    修改当前表的 identity 的值

    dbcc checkident(table,RESEED,value)

    其中:

    table 表示的是要修改的表;

    RESEED 表示的是identity的值会被修改;

    value 表示的是修改后的值;

    如下图所示,是把值修改成1后,查询的结果:

参考技术A 数据库中的要自动增长的属性一定要是int 类型的,在数据库中把标志识别改成“是”就可以了 参考技术B 是主键自动增长吧,可以选择设置主键为标识列或uniqueidentifier列 参考技术C 设置ID主键自增?在创建表的时候就可以。在新增数据的时候就不需要对ID进行赋值了
create table tableName(
id int identity(1,1) primary key,
data varchar(50)
)
/*
identity(1,1)就是自动增加,第一个参数是种子值,第二个是增量值;
primary key是主键
*/本回答被提问者采纳
参考技术D 主键ID自增长?可以在建立表格的时候,点击相应的列名称,然后在下面对应相应的属性,然后有个标识,然后打开前面的+号进入,把两个改成1即可

或者通过语句实现:create table表名(id int identity(1,1) primary key,.......)

以上是关于Oracle怎么让varchar类型自动增长的主要内容,如果未能解决你的问题,请参考以下文章

建表时,如何让mysql标识列ID从1开始自动增长

如何将oracle表中的字段由integer 转变为varchar2(50)

oracle自增长

oracle中自增长序列如何让它从数据表中现存的ID号开始增长。

如何让mysql的自动递增的字段重新从1开始

sql 设置主键 自动增长