达梦自增列identity

达梦自增列有两种使用形式,identity与auto_increment

使用说明:

1、一个表只能有一个自增字段,且自增字段类型只能是int或者bigint

2、自增列必须是主键,其他限制请查看sql语言手册详细了解

一、创建自增列(两种方式)

1、默认起点1,步长1

create table t_test1(id int primary key auto_increment) auto_increment=2;
create table t_test2(id int primary key identity);

2、查看那些列使用了自增

select b.owner, b.table_name, a.name COL_NAME, a.type$
from   SYS.SYSCOLUMNS a, dba_tables b,    sys.sysobjects c
where a.INFO2=1 --自增列
   and a.id  =c.id
   and c.name = b.table_name

3、删除自增定义

alter table t_test1   drop identity ;
alter table t_test2   drop  auto_increment;

二、auto_increment说明

实际与identity一样,只是为了兼容mysql语法,与mysql的自增有所区别,例如不能像mysql创建非主键自增列,也不能像mysql一样删除自增建使用alter  table t_test modify column id int(11)方式删除自增定义,以下是一个自增列删除迁移到达梦的存储过程例子

CREATE OR REPLACE   PROCEDURE ctg_sysmgr."DROPAUTOINCREMENT"() AS
     _database_name  VARCHAR(1024)  DEFAULT '';
     _table_name  VARCHAR(1024)  DEFAULT '';
     _column_name  VARCHAR(1024)  DEFAULT '';
     _column_type  VARCHAR(1024)  DEFAULT '';
     --_end  int  DEFAULT 0;
     sql VARCHAR(500);
/*     _cursor CURSOR FOR SELECT table_schema, table_name, column_name, column_type FROM "information_schema"."COLUMNS" WHERE EXTRA = 'auto_increment'
        AND table_schema IN ('ctg_sysmgr', 'ecs', 'monitor');*/
      _cursor cursor for    select b.owner, b.table_name, a.name COL_NAME, a.type$
from   SYS.SYSCOLUMNS a, dba_tables b,    sys.sysobjects c
where a.INFO2=1 --自增列
   and a.id  =c.id
   and c.name = b.table_name;  --and b.owner in ('ctg_sysmgr', 'ecs', 'monitor');
BEGIN 
    OPEN _cursor;
   LOOP
    FETCH _cursor INTO  _database_name, _table_name, _column_name, _column_type;   
    --WHILE _end = 0
  
      exit when _cursor%NOTFOUND;
/*   mysql删除自增列     SET sql = CONCAT("ALTER TABLE "", _database_name, ""."", _table_name , "" MODIFY COLUMN "", _column_name, "" ", _column_type); SET stmt = sql;
        EXECUTE stmt; NULL;*/
        --达梦删除自增定义
        sql = concat('alter table ',_database_name,'.',_table_name,' drop  auto_increment;');
        execute immediate sql;
        --print sql;
       
         END LOOP;
    CLOSE _cursor;
/*EXCEPTION
 WHEN NO_DATA_FOUND THEN  set _end = 1;*/ --退出游标使用 exit when _cursor%NOTFOUND;
END;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值