SQL语句被忽略和缺少表达式

时间:2013-12-14 20:52:23

标签: sql oracle debugging triggers

我正在尝试在Oracle SQL Developer中调试触发器,但我并不真正理解编译器的错误。我试图按照我见过的模板进行操作,但无论我尝试什么,它似乎都没有用。

CREATE OR REPLACE TRIGGER audit_movie_insert_trig
REFERENCING NEW AS newRow
AFTER INSERT ON audit_movie 
FOR EACH ROW
BEGIN
INSERT INTO audit_movie VALUES(audit_seq.nextval,  newRow.title,  newRow.m_year,  newRow.m_length, newRow.genre, newRow.studio_name, newRow.producer, SYSDATE, 'Insert');
END;

我得到的错误是:

Error(2,7): PL/SQL: SQL Statement ignored
Error(2,83): PL/SQL: ORA-00936: missing expression

任何帮助都会很棒。

2 个答案:

答案 0 :(得分:1)

.m_length,

请注意..它以“。”开头。 ..你想念别名!

答案 1 :(得分:1)

你有一些错误的条款,如syntax diagram shows。您应该在referencing子句之后after insert子句。

您还需要在newRow引用之前使用冒号。并且您似乎在触发器所针对的同一个表中插入,但看起来您的主表可能只是被称为movie

CREATE OR REPLACE TRIGGER audit_movie_insert_trig
AFTER INSERT ON movie 
REFERENCING NEW AS newRow
FOR EACH ROW
BEGIN
  INSERT INTO audit_movie (id, title, m_year, m_length, genre, studio_name,
    producer, when, what)
  VALUES(audit_seq.nextval, :newRow.title, :newRow.m_year, :newRow.m_length,
    :newRow.genre, :newRow.studio_name, :newRow.producer, SYSDATE, 'Insert');
END;

我已经猜到了列名。正如评论中所提到的,您应该指定列名以避免在修改表定义时出现问题,并且如果您尝试将错误的值插入错误的列中,则会更明显。