Database Oracle触发器编译但什么都没发生?

Database Oracle触发器编译但什么都没发生?,database,oracle,triggers,Database,Oracle,Triggers,我试图创建一个触发器,对插入后添加到表中的行进行计数。触发器编译并不会抛出错误,但我的计数器表中没有显示我的计数 以下是我的测试表结构: create table gene_presence(genome_id VARCHAR2(20), gene_id VARCHAR2(15), primary key(genome_id,gene_id) ); 下面是我创建一个表的代码,以及在更新该表时增加和减少的触发器: CREATE TABLE genes_in_genomes( gene_i

我试图创建一个触发器,对插入后添加到表中的行进行计数。触发器编译并不会抛出错误,但我的计数器表中没有显示我的计数

以下是我的测试表结构:

create table gene_presence(genome_id VARCHAR2(20), gene_id VARCHAR2(15), primary key(genome_id,gene_id) );
下面是我创建一个表的代码,以及在更新该表时增加和减少的触发器:

CREATE TABLE genes_in_genomes(
    gene_id varchar2(15),
    counter number (30));

INSERT INTO genes_in_genomes select count(*) as gene_count, gene_id as gene
from gene_presence
group by gene_id;

select * from genes_in_genomes; 

create or replace trigger gene_in_genome_counter after insert on gene_presence
for each row
begin 
    update genes_in_genomes set counter= counter+1 
    where gene_id= :new.gene_id;
end;
/
create or replace trigger gene_in_genome_dec after update on gene_presence
for each row
begin
    update genes_in_genomes set counter=counter-1 
    where gene_id=:old.gene_id;
    update genes_in_genomes set counter= counter+1 
    where gene_id=:new.gene_id;
end; 
/
然后我将数据插入gene_presence:

insert into gene_presence values('1072459.4', 'group_10297');
insert into gene_presence values('1411691.4',   'group_10297');
insert into gene_presence values('316407.9',    'group_10297');
insert into gene_presence values('316407.41',   'group_10297');
并尝试检查基因组中的基因:

select * from GENES_IN_GENOMES;

还有一张空桌子。想法???

使用触发器更新计数,或保持任何拒绝,几乎总是错误的。如果需要快速选择计数,请使用视图、物化视图

触发器只有update语句。如果基因\u id匹配:new.gene\u id在\u基因组中的基因\u中不存在,则更新将更新零行。更新零行不是错误

使用merge向上插入基因组中的基因

回应有关视图的评论:

CREATE VIEW genes_in_genomes AS
SELECT gene_id varchar2(15), COUNT(*) AS counter
FROM gene_presence
GROUP BY gene_id;

我完全同意你的看法。我有一个项目合作伙伴,他坚持认为这是一个导火索。作为一种观点,你会如何推荐这样做?首先,抛弃你的伴侣;