我怀疑删除用户表中的一行并在同一个表中添加新数据,而不是占用该行的位置,创建一个新行,实际上该实现是在用户序列中递增的每个1,因为你将新数据添加到用户表中,或许为了解决这个疑问,有必要使用函数或触发器
创建表用户和主键
/* table user*/
create table users (id_user number(10) not null,
name_user varchar(30) not null);
/* primary key */
alter table users add constraint user_pk primary key (id_user);
/* create sequence */
create sequence seq_user increment by 1 start with 1;
/* insert two user date */
insert into users(id_user, name_user) values(seq_user.NEXTVAL, 'Renata Souza');
insert into users(id_user, name_user) values(seq_user.NEXTVAL, 'Rihanna Smith');
选择所有用户
select * from users;
如果delete
id_user = 2
喜欢,那么疑问就是
/* delete user with id = 2 */
delete from users where id_user = 2;
/*select users*/
select * from users;
如果我insert
更多两个用户日期
insert into users(id_user, name_user) values(seq_user.NEXTVAL, 'Sara Carbonero');
insert into users(id_user, name_user) values(seq_user.NEXTVAL, 'Patricia Guedes');
/*select users*/
select * from users;
事实上,sequence_user
应start by id_user = 2
但starts at 3
,function
或triggers
是update
sequence_user
/* Create user */
PROCEDURE create_user(p_name IN VARCHAR2,
p_error OUT NUMBER,
p_msg_error OUT VARCHAR2)
IS
BEGIN
p_error := 0;
INSERT INTO users (id_user, name_user) VALUES(seq_user.NEXTVAL, p_name)
COMMIT;
EXCEPTION
WHEN OTHERS THEN
p_error := 1;
p_msg_error := 'Error!'||SQLERRM;
END create_user;
如果该行被删除
现在在PL / SQL
中PROCEDURE delete_user(
p_id_user IN NUMBER,
p_error OUT NUMBER,
p_msg_error OUT VARCHAR2)
IS
BEGIN
p_error := 0;
DELETE FROM users WHERE users.id_user = p_id_user;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
p_error := 1;
p_msg_error := 'Error!'||SQLERRM;
END delete_user;
现在我要删除此用户
C:\ABC\Uninst\<Variant-1>\<variant1-uninstaller>
答案 0 :(得分:2)
绝不会,绝对不会保证oracle序列会给你一个不间断的数字序列。如果这是你想要的,那么你需要自己做
SELECT MAX(id)+1 ...
修改了创建用户程序
/* Create user */
PROCEDURE create_user(p_name IN VARCHAR2,
p_error OUT NUMBER,
p_msg_error OUT VARCHAR2)
IS
l_nextUser NUMBER;
BEGIN
p_error := 0;
SELECT MAX(id_user)+1
INTO l_nextUser
FROM users;
INSERT INTO users (id_user, name_user) VALUES(l_nextUser, p_name)
COMMIT;
EXCEPTION
WHEN OTHERS THEN
p_error := 1;
p_msg_error := 'Error!'||SQLERRM;
END create_user;