代码之家  ›  专栏  ›  技术社区  ›  Code

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

  •  -1
  • Code  · 技术社区  · 11 年前

    我需要一些帮助来创建SQL触发器。我总是犯错误

    ORA-04074:引用名称无效

    从我查找的结果来看,这是一个迹象,表明我给出的引用名称是一个关键字,但我使用了多个名称,总是遇到相同的错误。

    代码如下:

    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 回复  |  直到 11 年前
        1
  •  2
  •   Jon Tofte-Hansen    11 年前

    这个问题是PL/SQL。

    引用的语法为:

    REFERENCING NEW AS nrw
    

    没有“ROW”。

    正如法赫格所说,您每一行都缺少打印,打印不是您想要的。你可能不得不提出一个例外。但这只是猜测。 阅读语法(11g): http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/create_trigger.htm#LNPLS01374

        2
  •  1
  •   void    11 年前

    你错过了 BEGIN 单词和 FOR EACH ROW 我认为你需要它,你还漏掉了分号 ; 在print命令之后(不确定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;
    /