Sql 在触发器语句中选择

Sql 在触发器语句中选择,sql,oracle,select,triggers,Sql,Oracle,Select,Triggers,我有一个触发器: CREATE OR REPLACE TRIGGER TR_SIGHTING_DESC BEFORE INSERT ON sightings FOR EACH ROW BEGIN SELECT bird_name INTO bn from birds where bird_id = :new.bird_id; :new.description := 'A bird of the species ' || bn

我有一个触发器:

CREATE OR REPLACE TRIGGER TR_SIGHTING_DESC
BEFORE INSERT ON sightings
FOR EACH ROW
BEGIN
SELECT bird_name
INTO bn
from birds
where bird_id = :new.bird_id;    
    :new.description := 'A bird of the species ' 
                        || bn 
                        || ' was spotted in the ' 
                        || :new.latitude || ','|| :new.longitude 
                        || ' part of the observation area';
END;
/
它一直说它是无效的。我试图从相应的ID中检索bird_name,例如,将其插入到sightings表中:

INSERT INTO sightings (spotter_id, bird_id, latitude,
longitude, sighting_date)
VALUES (2457, 901, -28.0, 152, '09-MAR-2016');

您必须声明变量

CREATE OR REPLACE TRIGGER TR_SIGHTING_DESC
BEFORE INSERT ON sightings
FOR EACH ROW
DECLARE bn birds.bird_name%type;
BEGIN
SELECT bird_name
INTO bn
from birds
where bird_id = :new.bird_id;    
    :new.description := 'A bird of the species ' 
                        || bn 
                        || ' was spotted in the ' 
                        || :new.latitude || ','|| :new.longitude 
                        || ' part of the observation area';
END;
/
好OL2200
在插入dn之前,必须先声明dn。

标记所使用的dbms。(该代码看起来不像ANSI SQL。)您能分享错误的确切文本吗?未定义
bn
变量。请浏览一些basis plsql教程。