无论名称如何,SQL中的引用名称都无效

时间:2015-03-21 23:15:30

标签: sql oracle plsql

我需要一些我正在尝试创建的SQL触发器的帮助。我一直收到错误

  

ORA - 04074:无效的REFERENCING名称

从我查看的内容来看,我所提供的引用名称是一个关键字,但我使用了多个名称并且总是遇到同样的错误。

以下是代码:

CREATE OR REPLACE TRIGGER CatchSightInserts
AFTER INSERT ON SIGHTINGS
REFERENCING NEW ROW AS nrw
WHEN (nrw.LOCATION IN (SELECT LOCATION
                       FROM FEATURES
                       WHERE CLASS = 'SUMMIT'))
PRINT 'An invalid entry was inserted.'
END
/

我也尝试将第3行更改为

REFERENCING NEW ROW AS NewRow 

如果它是导致问题的名称,但错误仍然存​​在。我对SQL比较陌生,所以任何帮助都会非常有价值。

提前致谢!

2 个答案:

答案 0 :(得分:2)

这个问题是PL / SQL。

引用的语法是:

REFERENCING NEW AS nrw

没有" ROW"。

正如Farheg所说,你错过了每一行并且打印不是你想要的。你可能不得不提出异常。但这是一个猜测。 阅读语法(11g): http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/create_trigger.htm#LNPLS01374

答案 1 :(得分:1)

你错过了一个BEGIN字以及FOR EACH ROW我认为你需要它,你也错过了分号;后打印命令(我不确定是否存在于Oracle中)和也是在END之后:

CREATE OR REPLACE TRIGGER CatchSightInserts
AFTER INSERT ON SIGHTINGS
REFERENCING NEW ROW AS nrw
FOR EACH ROW
WHEN (nrw.LOCATION IN (SELECT LOCATION
                       FROM FEATURES
                       WHERE CLASS = 'SUMMIT'))
BEGIN
PRINT 'An invalid entry was inserted.';
END;
/