2017-05-21 7 views
1

실제로 오라클 SQL 기본에 훈련 그리고 난이 하나처럼 보이는 트리거를 만든 (그것은 작동!) :트리거에 직접 SELECT 결과를 쓰기 : new.field

create or replace TRIGGER insert_refereenation 
BEFORE INSERT OR UPDATE ON Game 
FOR EACH ROW 
DECLARE 
v_nation_id NUMBER(4) := ''; 
v_nationname VARCHAR2(100) := ''; 

BEGIN 

SELECT Nation_id 
INTO v_nation_id 
FROM referre 
WHERE referee_id= :new.referee_id; 

SELECT Name 
INTO v_nationname 
FROM Nation 
WHERE Nation_id = v_nation_id; 

:NEW.referee_nation_name:= v_nationname; 

END; 

이 트리거는 잘 작동 NEW.referee_nation_name 필드 :

  1. 가에 두 번째 SELECT 오른쪽에서 결과를 쓸 수 있나요 :하지만 두 가지 간단한 질문이? 따라서 두 번째 변수는 필요하지 않습니다.

  2. 최적화 할 수있는 다른 것들이 있습니까?

답변

0

당신은 당신이 대신 두 가지 중 하나만 쿼리가 너무 조인을 사용하고 into 절에 직접 :new.column_name을 사용할 수

SELECT n.name 
INTO :new.referee_nation_name 
FROM referee r 
JOIN nation n ON r.nation_id = n.nation_id 
WHERE r.referee_id = :new.referee_id;