现在我已经创建了一个序列和一个触发器来自动递增ID值,如下所示:
CREATE OR REPLACE TRIGGER "RTH"."TBL_USER_TRIGGER"
BEFORE INSERT ON TBL_USER
FOR EACH ROW
BEGIN
SELECT TBL_USER_SEQ.nextval
INTO :new.USR_ID
FROM dual;
END;
ALTER TRIGGER "RTH"."TBL_USER_TRIGGER" ENABLE;
假设我有三行:
User ID FIRSTNAME LASTNAME
====================================
1 John smith
2 James smith
3 Pat smith
当我删除第一行(1)时,我希望ID值自动更正自己以纠正数字,以便第二行ID值变为1,第三行ID值变为2
在甲骨文有可能吗?或者我是通过代码完成的,因为我在用户提交表单时使用Java将记录插入表中。
Java DAO类:
public class RegistrationDAO {
public void insert(User user) {
try {
Connection con = DBConnection.getConnection();
String query = "insert into TBL_USER(USR_FIRST_NAME,USR_LST_NAME,USR_PRIMARY_EMAIL,USR_PASSWORD) values(?,?,?,?)";
PreparedStatement pst = con.prepareStatement(query);
pst.setString(1, user.getFirstName());
pst.setString(2, user.getLastName());
pst.setString(3, user.getEmail());
pst.setString(4, user.getPassword());
pst.executeUpdate();
} catch (Exception e) {
System.out.println("@@@@Record insertion error in Registration DAO@@@@");
System.out.println(e);
}
}
}
答案 0 :(得分:2)
评论太长了。
简单的答案是:“不,你不想这样做。” id的目的是唯一标识每一行。顺序ID还具有提供插入顺序的功能。它无意随时间变化。第1行是第1行是第1行。
如果您想要订购,那么将id声明为主键并使用如下查询:
select t.*, row_number() over (order by usr_id) as seqnum
from t;