1

我实际上正在接受 oracle SQL 基础知识的培训,并且我创建了一个看起来像这样的触发器(它有效!):

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;

这个触发器工作正常,但我有两个简单的问题:

  1. 是否可以将第二个 SELECT 的结果直接写入: NEW.referee_nation_name 字段?所以我不需要第二个变量。

  2. 您是否看到其他可以优化的东西?

4

1 回答 1

0

您可以使用连接,以便您只有一个查询而不是两个,并:new.column_name直接在into子句中使用:

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;
于 2017-05-21T07:58:02.160 回答