我如何限制 oracle 中重复行的数量?
how can i limit count of duplicate rows in oracle?
create table file( member_no number, filepath varchar2(100) );
我想限制此 table 中 member_no 的重复行数。
例如:
这样,member_no的数量最多可以达到5个,但最好不要超过6个。
我该怎么做?
所以你有两种我能想到的方法:
当您插入时(我假设您正在使用存储过程)运行 if 检查当前行
Declare
count number;
too_many_num_exception EXCEPTION;
BEGIN
select count(file_path) into count from file where member_no = <num_you_are_inserting>;
if(count = 5)
Then
raise too_many_num_exception;
end if;
insert(...);
EXCEPTION
WHEN too_many_num_exception then
--do something
end;
或者您可以尝试在您的表上创建索引(但这可能行不通 - 这只是一个想法)
CREATE UNIQUE INDEX file_ix1 on file (
CASE WHEN (select count() from file ... ) < 6 THEN member_id ELSE NULL END)
online
虽然我不是 100% 能行得通
create table file( member_no number, filepath varchar2(100) );
我想限制此 table 中 member_no 的重复行数。 例如:
这样,member_no的数量最多可以达到5个,但最好不要超过6个。 我该怎么做?
所以你有两种我能想到的方法:
当您插入时(我假设您正在使用存储过程)运行 if 检查当前行
Declare
count number;
too_many_num_exception EXCEPTION;
BEGIN
select count(file_path) into count from file where member_no = <num_you_are_inserting>;
if(count = 5)
Then
raise too_many_num_exception;
end if;
insert(...);
EXCEPTION
WHEN too_many_num_exception then
--do something
end;
或者您可以尝试在您的表上创建索引(但这可能行不通 - 这只是一个想法)
CREATE UNIQUE INDEX file_ix1 on file (
CASE WHEN (select count() from file ... ) < 6 THEN member_id ELSE NULL END)
online
虽然我不是 100% 能行得通