我正在尝试在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
任何帮助都会很棒。
答案 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;
我已经猜到了列名。正如评论中所提到的,您应该指定列名以避免在修改表定义时出现问题,并且如果您尝试将错误的值插入错误的列中,则会更明显。