现在在看一个别人写的工程,想把它从mysql移植到oracle数据库环境下,mysql中支持主键id自动增长(auto_increment),但是oracle不支持,工程中用的hibernate,在映射多对多关系时使用了中间类,但是并没有实例化中间类,所以保存时中间表的id为空,我很懒,不想改它的代码,所以上网查找并总结了以下方法,可以实现主键自动增长:
比如我的中间表名为test,实现代码如下:
1. 创建sequence:
create sequence test_id increment by 1 start with 1 nocache;
2. 创建触发器:
create or replace trigger test_trigger
before insert on test
for each row
begin
select test_id.nextval into :new.id from dual;
end;
/
注意:
为:new.id取值时不能写成
:new.id :=test_id.nextval
这样会报 "PLS-00357: 在此上下文中不允许表, 视图或序列引用" 的错误
分享到:
相关推荐
oracle触发器实现主键自动增长操作
oracle数据库中主键属性没有自增长,所以只能自己写程序来实现,用序列与触发器,可以解决这个 问题
oracle序列主键自增长实现主键自动增长
教你如何使用oracle中的sequence,实现主键自动增长
oracle设置主键自动增长 首先,你要有一张表! 然后,你需要一个自定义的sequence 以上代码完成了一个序列(sequence)的建立过程,名称为emp_sequence,范围是从1开始到无限大(无限大的程度是由你机器决定的),nocycle...
Oracle数据库创建表tuser设置主键自动增长,先创建表,然后创建基于该表的队列。
oracle创建表时主键自动增长方法 5 测试反复执行如下语句:insert into Test_Increase(Username) values('test')6 查看插入结果:userid username1 test2 test3 test4 test5 test6 test7 test8 test9 test
oracle设置主外键即主键序列自动增长
( 使用powerdesigner创建oracle_数据库表,设置表主键列为自动增长.doc )
在hibernate中实现oracle的自动增长
Oracle自增长主键自动生成类 public static int nextID String table { if table null return 1; table table toLowerCase ; String strKey table; if sequences containsKey strKey { ...
这里所说的自动增长列,主要是指一个表中主键id的自动增长。 Oracle与Mysql不同,不能在CREATE建立表时设置自动增长列功能。 Oracle必须通过创建sequence序列来实现自动增加列的功能。 首先要建立序列(当然必须要先...
本篇文章是对Mysql,SqlServer,Oracle主键自动增长的设置进行了详细的分析介绍,需要的朋友参考下
2、创建自动增长序列 代码如下: CREATESEQUENCETestIncrease_Sequence INCREMENTBY1–每次加几个 STARTWITH1–从1开始计数 NOMAXVALUE–不设置最大值,设置最大值:maxvalue9999 NOCYCLE–一直累加,不循环 CACHE10...
序列定义存储在数据字典中,通过提供唯一数值的顺序表来简化程序设计工作,可以使用序列自动产生主键的键值。当一个序列第一次被查询调用时,它将返回一个预定值。在随后的每次查询中,序列将产生一个按指定的增量...
我们经常在设计数据库的时候用一个系统自动分配的ID来作为我们的主键,但是在Oracle没有自增主键的设置,我们可以通过这篇文章介绍的方法实现,有需要的朋友们可以参考借鉴,下面来一起看看吧。
8-14 缺省临时表空间 8-15 缺省临时表空间的限制 8-16 脱机状态 8-17 只读表空间 8-19 删除表空间 8-20 改变表空间的大小 8-21 允许数据文件的自动增长 8-22 手工改变数据文件的大小 8-23 给表空间添加数据文件 8-24...