2014-10-07 2 views
1

나는이 트리거에 대한 구문을 올바르게 이해하기 위해 2 시간 이상 노력했지만 컴파일 오류가 계속 발생하여 누군가가 잘못된 방향으로 나를 가리킬 수 있습니까?오라클 구문 오류 트리거

film_id 
rental_rate 


CREATE OR REPLACE TRIGGER TRIGGER_ACTOR_STARRED 
BEFORE INSERT ON film_actor FOR EACH ROW 
BEGIN  
IF :new.actor_id IN (SELECT * 
        FROM V_ACTORS_STARRED) THEN 
    UPDATE film 
    SET rental_rate := rental_rate * 1.10 
    WHERE :new.actor_id = film_actor.actor_id 
    AND film.film_id = film_actor.film_id; 
    END IF; 
END; 
/

다음과 같이 I가 선택하는 노력하고있어보기 :

actor_id 
film_id 

영화는 다음과 같은 필드가 있습니다

[Compilation errors: missing equal sign line 5, sql statement ignored, line 4] 

FILM_ACTOR에는 다음과 같은 필드가

CREATE OR REPLACE VIEW V_ACTORS_STARRED AS 
SELECT actor_id 
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))); 
+0

가능한 중복)에서 테이블)> 0 then] (http://stackoverflow.com/questions/10200281/if-select-countcolumn-from-table-0-then) –

+0

가능한 중복 게시물, 같은 솔루션에서 작업을 시도했습니다 오류가 표시되고/throw됩니다. – user3603183

답변

2

당신은 SQL 업데이트를 실행하고 - 그것은 정규 = SQL 연산자를 사용한다,하지 PL/SQL의 := 할당 연산자 : [경우 (SELECT COUNT (열

UPDATE film 
SET rental_rate = rental_rate * 1.10 -- Note ":=" was replaced with "=" 
WHERE :new.actor_id = film_actor.actor_id 
AND film.film_id = film_actor.film_id; 
1

SET 부분에서 콜론을 제거하십시오. f UPDATE 문.

UPDATE film 
SET rental_rate = rental_rate * 1.10 
WHERE :new.actor_id = film_actor.actor_id 
AND film.film_id = film_actor.film_id;