在oracle sql developer中插入后如何添加触发器以自动计算行数

问题描述 投票:0回答:2

我想添加触发器来计数插入后的电影数量!

这是存储计数值的表:

CREATE TABLE mov_count
  (mcount NUMBER);

和电影表:

create table movie
  (mov_id number primary key,
   mov_title varchar(20),
   mov_lang varchar(20));

这是我创建的触发器:

create trigger count_movie_trg
after insert on movie
for each row
BEGIN

  UPDATE mov_count
  SET    mcount = (SELECT COUNT(*) FROM movie);

END; 
/

创建此影片后,我尝试添加电影,但其显示的突变触发器/功能可能看不到它的错误。

sql database oracle triggers oracle-sqldeveloper
2个回答
0
投票

FOR EACH ROW困扰您。它是表级触发器,因此:

输入一个虚拟值作为开始(稍后将进行更新):

SQL> insert into mov_count values (0);

1 row created.

触发器:

SQL> create or replace trigger count_movie_trg
  2    after insert on movie
  3  begin
  4    update mov_count c set
  5      c.mcount = (select count(*) from movie m);
  6  end;
  7  /

Trigger created.

测试:

SQL> insert into movie
  2    select 1, 'Titanic' from dual union all
  3    select 2, 'Superman' from dual;

2 rows created.

SQL> select count(*) from mov_count;

  COUNT(*)
----------
         1

SQL>

0
投票

为什么不只保留值而不参考原始表?

create trigger count_movie_trg after insert on movie for each row
begin
    update mov_count set mcount = mcount + 1;
end;

为了使计数保持最新,您还需要一个delete触发器。

© www.soinside.com 2019 - 2024. All rights reserved.