Chinaunix首页 | 论坛 | 博客
  • 博客访问: 579351
  • 博文数量: 718
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 4960
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-17 13:24
文章分类

全部博文(718)

文章存档

2011年(1)

2008年(717)

我的朋友

分类:

2008-10-17 13:24:25

  很多人都知道在中并没有像其他数据库中的自增字段,那么我们怎样才能实现的自增字段功能呢?下面我们通过Oracle中的Sequence和Trigger来实现此功能。

  1、首先建立一个创建自增字段的过程

  //Written by Sun Zhenfang 20040903

  create or replace procedure pr_CreateIdentityColumn

  (tablename varchar2,columnname varchar2)

  as

  strsql varchar2(1000);

  begin

  strsql := 'create sequence seq_'||tablename||'

  minvalue 1 maxvalue 999999999999999999

  start with 1 increment by 1 nocache';

  execute immediate strsql;

  strsql := 'create or replace trigger trg_'||tablename||'

  before insert on '||tablename||' for each row begin

  select seq_'||tablename||'.nextval into :new.'||columnname||'

  from dual; end;';

  execute immediate strsql;

  end;

  2、Oracle中执行动态SQL时要显示授权(即使该用户拥有该相关权限)

  GRANT CREATE ANY SEQUENCE TO "UserName";

  GRANT CREATE ANY TRIGGER TO "UserName";

  (注意:数据库用户名区分大小写)

  3、重新Compile过程pr_CreateIdentityColumn

  4、搞定,下面我们就可以用这个存储过程建立自增自段了。

  5、调用存储过程建立自增字段(Note: 第一个参数是表名,第二个参数为自增字段的名字)

  exec pr_createidentitycolumn('sdspdept','deptid');

  exec pr_createidentitycolumn('sdspuser','userid');

  exec pr_createidentitycolumn('sdspsysrole','sysroleid');

  exec pr_createidentitycolumn('sdspfp','sysfpid');

  exec pr_createidentitycolumn('sdspphasemodel','phasemodelid');

  exec pr_createidentitycolumn('sdspphase','phaseid');

  …… ……

【责编:John】

--------------------next---------------------

阅读(237) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~