说明:第一次做项目使用oracle发现无法像mysql那样在客户端设置主键自增长,oracle必须使用语句生成序列。
(细节:oracle想要主键自增,必须创建序列,在所用的框架(已myBatis举例),加上SENDCOLLNOTICEID.nextval。(序列名.nextval)。
创建触发器则不用改框架的配置文件。再同一个数据库中所有的序列和触发器名称是禁止重复的。一张表中的序列叫ID,另一张表中的序列就不能再叫ID,触发器也一样,不能重复)
创建oracle 序列语句
CREATE SEQUENCE SENDCOLLNOTICEID -- SENDCOLLNOTICEID这个就是后面要用到这个序列号时引用的名称
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXVALUE -- 不设置最大值
NOCYCLE -- 一直累加,不循环
--CACHE 100; -- 缓存值 100==========不理解缓存值一般不使用
再myBatis 中使用序列方法:
<insert id="insertSelective" parameterType="com.test.entity.TF_NOTICE">
insert into TF_NOTICE
<trim prefix="("suffix=")" suffixOverrides=",">
REPLY_ID ,<!-- 主键id/或者自增的列。序列的使用方法 -->
<if test="suffId !=null" >
NOTICE_ID,
</if>
</trim>
<trim prefix="values ("suffix=")" suffixOverrides=",">
SENDCOLLNOTICEID.nextval,<!-- 序列的使用方法 -->
<if test="noticeId!=null" >
#{noticeId,jdbcType=DECIMAL},
</if>
</trim>
</insert>
创建 oracle触发器语句
--CFQ_TF_SEARCH_REPLY 触发器名称
--TF_NOTICE 表名
-- REPLY_ID 主键
--SENDCOLLNOTICEID 序列名
create triggerCFQ_TF_SEARCH_REPLY before
insert on TF_REPLY for each row when (new.REPLY_ID is null)
begin
select SENDCOLLNOTICEID.nextval into:new.REPLY_ID from dual;
end;