Oracle11g 创建行数有限的表

Oracle11g 创建行数有限的表,oracle11g,oracle-sqldeveloper,Oracle11g,Oracle Sqldeveloper,我想创建行数有限的表。 例如,如果我们尝试在rownumber大于2.000的表中插入数据,则返回一些错误或其他信息 如何管理这一点?一种方法是创建一个触发器来检查插入行的数量;例如,假设您有这个表 create table notManyRows(n number) 如果要将行数限制为3,可以添加如下触发器: create or replace trigger notManyRowsTrg after insert on notManyRows declare vCheck numb

我想创建行数有限的表。 例如,如果我们尝试在rownumber大于2.000的表中插入数据,则返回一些错误或其他信息


如何管理这一点?

一种方法是创建一个触发器来检查插入行的数量;例如,假设您有这个表

create table notManyRows(n number)
如果要将行数限制为3,可以添加如下触发器:

create or replace trigger notManyRowsTrg
after insert on notManyRows
declare
    vCheck number;
begin
    select count(*)
    into vCheck
    from notManyRows;
    --
    if vCheck > 3 then
        raise_application_error(-20001, 'Too many rows in the table');
    end if;
end;
工作原理:

SQL> insert into notManyRows values (1);

1 row created.

SQL> insert into notManyRows values (1);

1 row created.

SQL> insert into notManyRows values (1);

1 row created.

SQL> insert into notManyRows values (1);
insert into notManyRows values (1)
*
ERROR at line 1:
ORA-20001: Too many rows in the table
ORA-06512: at "ALEK.NOTMANYROWSTRG", line 9
ORA-04088: error during execution of trigger 'ALEK.NOTMANYROWSTRG'


SQL>

是否可以创建主键,即从数字1自动递增到2000?这取决于您的Oracle版本。但是,这如何防止插入行?您仍然需要一个触发器来检查PK值是否大于限制;另外,如果我删除1中ID为的所有行。。。19999年?非常感谢。当有人解决它时,它看起来很简单:)Oracle版本是11g。我不认为删除1到19999之间的行会有问题,完全忘记了这一点。我只是问,这可以澄清什么是最好的选择。有更多经验的人可以比我这样的洛奇有更广阔的前景。这就是为什么我要问:)