Ошибка получения таблицы не существует при попытке вставить в таблицу из триггера - PullRequest
0 голосов
/ 17 марта 2020

Я пытаюсь использовать триггер для заполнения значений другой таблицы. Триггер отслеживает вставку в таблицу рейтингов и обновляет значения другой таблицы, top5restaurants. Я не понял, как сохранить только top 5 в top5restaurants, я не знаю, как ограничить таблицу определенным количеством записей. Но сейчас я не могу ничего сделать с top5restaurants внутри триггера.

drop view top_rest;

create view top_rest (rid, rat) 
as
    (select distinct rid, max(stars) 
     from rating
     group by rid);

drop table top5restaurants;

create table top5restaurants(rid int);

insert into top5restaurants(rid)
    select rid from top_rest
    where rownum <= 5
    order by rat asc;

create or replace trigger top5_trigger
after insert on ratings
for each row
    declare top5 top5restaurants%rowtype;

    cursor top5_cursor is
    select rid from top_rest
    where rownum <=5
    order by rat;
    begin
    for record in top5_cursor
    loop

        fetch top5_cursor into top5; 
        insert into top5restaurants values(top5);
    end loop;
    end;
    /
--    
--
begin
update_reviews('Jade Court','Sarah M.', 4, '08/17/2017');
update_reviews('Shanghai Terrace','Cameron J.', 5, '08/17/2017');
update_reviews('Rangoli','Vivek T.',3,'09/17/2017');
update_reviews('Shanghai Inn','Audrey M.',2,'07/08/2017');
update_reviews('Cumin','Cameron J.', 2, '09/17/2017');
end;
/    
select * from top5restaurants;
insert into top5restaurants values(184);

Однако таблица существует, и я могу выполнять запросы к ней, и она возвращает данные, которые я вставил при создании таблицы. Я также могу вставить значения. Не уверен, почему я получаю таблицу не найдена ошибка при использовании триггера.

Ответы [ 2 ]

1 голос
/ 17 марта 2020

Помимо различий в именах таблиц (ответ Littlefoot) в trigger и view, вы неправильно использовали коллекцию rowtype при вставке данных.

вы должны удалить скобки:

заменить

insert into top5restaurants values(top5);

на

insert into top5restaurants values top5;

Ура !!

0 голосов
/ 17 марта 2020

Вы разместили не все задействованные таблицы, но - что очевидно, это то, что представление создается как

create view top_rest ... from rating
                              ------

, а триггер создается как

after insert on ratings
                -------
                      ^
                      s?

Какой это? rating или ratings?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...