1、Oracle创建序列命令
CREATE SEQUENCE SEQ_ID_XXXXXX -- 序列名称
INCREMENT BY 1 -- 从1开始
MINVALUE 0
MAXVALUE 999999999999999999
START WITH 1
CACHE 20;
2、Oracle序列查询命令
// 查询一个新的序列值
SELECT SEQ_ID_XXXXXX.NEXTVAL FROM DUAL;
// 查询当前序列的值
SELECT SEQ_ID_XXXXXX.CURRVAL FROM DUAL;
3、Oracle序列删除命令
// 删除序列命令
DROP SEQUENCE SEQ_ID_XXXXXX; -- 语法:DROP 序列名
4、Oracle序列实际应用
// 使用方法一,查询序列
<insert id="addLookRecord" parameterType="com.haha.business.look.TLookRecord">
<selectKey keyProperty="id" resultType="long" order="BEFORE" >
SELECT SEQ_ID_XXXXXX.NEXTVAL FROM DUAL
</selectKey>
INSERT INTO T_LOOK_RECORD(ID,UID,NAME,CREATE_TIME) VALUES(#{id,jdbcType=BIGINT},#{uid,jdbcType=VARCHAR},#{name,jdbcType=VARCHAR},SYSDATE)
</insert>
// 使用方法二,创建function,在function中获取seqId,如下:
<insert id="addLookRecord" parameterType="com.haha.business.look.TLookRecord">
INSERT INTO T_LOOK_RECORD(ID,UID,NAME,CREATE_TIME) VALUES(FUNC_NEXTID('T_LOOK_RECORD'),#{uid,jdbcType=VARCHAR},#{name,jdbcType=VARCHAR},SYSDATE)
</insert>
// 创建一个FUNCTION,需执行存储过程
CREATE OR REPLACE FUNCTION FUNC_NEXTID(v_seq_id varchar2)
RETURN NUMBER IS
V_RESULT_NUM NUMBER;
BEGIN
SELECT SEQ_ID_XXXXXX.NEXTVAL INTO V_RESULT_NUM FROM DUAL;
RETURN(V_RESULT_NUM) ;
END FUNC_NEXTID;
5、注意事项
1、序列是有用户之分的,创建序列时,需要到执行的用户下去执行创建序列的命令。
2、CURRVAL返回当前SEQUENCE的值,首次需要执行NEXTVAL,初始化后才可以使用CURRVAL。
3、执行NEXTVAL之后的NEXTVAL会自动增加创建序列时定义的INCREMENT BY值。
4、若是返回的NEXTVAL不是连续的,可以检查下是否是代码中有其他地方使用NEXTVAL。
5、在Oracle数据库中,序列(Sequence)与表没有直接关联。序列是一个独立的数据库对象,它生成一个唯一的数值序列。这些序列通常用于填充主键列或进行计数操作。
6、虽然序列可以与表的主键列相关联,但它们并不是直接关联的。通常,通过创建一个序列和一个触发器,可以实现在插入数据时自动填充表的主键列。这种情况下,序列用于生成唯一的序列号,而触发器用于在插入数据时将该序列号插入到表的主键列中。
7、总结起来,序列是独立的数据库对象,它们可以用于生成唯一的数值序列,但与表没有直接关联。它们可以与其他数据库对象(如表)相关联,但这种关联是通过触发器等其他机制实现的。