2017-05-21 2 views
1

私は実際のOracle SQLの基本に訓練していると私はこの1つのように見えるのトリガーを作成している(それが動作します!):トリガーに直接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. それはへの2番目のSELECTの右からの結果を書き込むことができる。しかし、私は2つの簡単な質問がありますか?だから私は2番目の変数は必要ありません。

  2. 他にも最適化できるものがありますか?

答えて

0

あなたがあなたの代わりに2の唯一のクエリを持っているので、結合を使用し、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; 
関連する問題