可以编写这个sql触发器吗?

时间:2014-10-05 11:15:31

标签: sql oracle triggers

我有一个sql语句来查找在给定架构中租金率最高的纪录片中扮演过角色的演员:

film: film_id, rental_rate, 
film_actor: actor_id, film_id
film_category: film_id, category_id
category: category_id, name

SELECT *
FROM actor 
WHERE actor_id IN
        (SELECT actor_id
         FROM film_actor
         WHERE film_actor.actor_id = actor.actor_id
         AND film_id IN
                (SELECT film.film_id
                 FROM film, film_category, category
                 WHERE category.name = 'Documentary'
                 AND film.film_id = film_category.film_id
                 AND film_category.category_id = category.category_id
                 AND rental_rate = (SELECT MAX(rental_rate)
                                    FROM film, category, film_category
                                    WHERE category.name = 'Documentary'
                                    AND film.film_id = film_category.film_id
                                    AND film_category.category_id =  category.category_id)));

我被要求解释的一个问题是,是否有可能编写一个SQL语句来创建一个Oracle触发器,以便将我在sql语句中找到的任何演员主演的任何未来电影的rental_rate增加10%我写过。我无法想到一个我无法理解的原因 - 除非我错过了一些东西但想对此有第二意见,以及如果可能的话我该怎么做

1 个答案:

答案 0 :(得分:1)

假设电影类别不会改变,你很可能只能在一个触发器中执行此操作,只有associative entity film_actor。它的关键作用是实现filmactor之间的多对多关系。

但是作为一个“附带好处”,你知道每次你和一些演员一起添加一部新电影时,或每次你添加一部至少在你的一部电影中演过的演员时,这张表都会被触及。如果你以某种方式更新现有电影和现有演员之间的关联,也会感动。

因此,在此表上使用触发器AFTER INSERT OR UPDATE可以解决问题。