我想添加触发器来计数插入后的电影数量!
这是存储计数值的表:
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;
/
创建此影片后,我尝试添加电影,但其显示的突变触发器/功能可能看不到它的错误。
是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>
为什么不只保留值而不参考原始表?
create trigger count_movie_trg after insert on movie for each row
begin
update mov_count set mcount = mcount + 1;
end;
为了使计数保持最新,您还需要一个delete
触发器。