PLS-00103: Обнаружен символ конца файла

просто пытаюсь сделать простой триггер в оракуле SQL для регистрации данных, когда строка в таблице вставляется, обновляется или удаляется. но выхожу с ошибкой.

вот мой код

create or replace trigger "APP_LOG_INSERT"
BEFORE
insert on "APPLICATIONS"
for each row
begin
INSERT INTO APP_LOG (APPLICATION_ID, SRN, APPLICATION_STATUS)
SELECT APPLICATION_ID, SRN, STATUS_ID
FROM INSERTED
end;

и ошибка, которую я получаю,

PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following: (
begin case declare end exception exit for goto if loop mod null pragma raise return select
update while with <an identifier> <a double-quoted delimited-identifier> <a bind variable>
<< continue close current delete fetch lock insert open rollback savepoint set sql execute
 commit forall merge pipe purge`

буду очень признателен за любую помощь, я новичок в оракуле, поэтому, возможно, я просто пропустил что-то простое


person Eli Ebel Childs    schedule 06.11.2015    source источник
comment
У Oracle есть что-то под названием INSERTED ???   -  person Gordon Linoff    schedule 06.11.2015
comment
это должна быть виртуальная таблица, созданная оракулом? получил это отсюда social.msdn.microsoft.com/forums/sqlserver/en-US/   -  person Eli Ebel Childs    schedule 06.11.2015
comment
Это виртуальная таблица, созданная Microsoft SQL Server. Oracle использует другой метод для триггеров.   -  person Gordon Linoff    schedule 06.11.2015
comment
а, да, это имеет смысл. Благодарность   -  person Eli Ebel Childs    schedule 06.11.2015


Ответы (1)


Предположительно, вы хотите что-то вроде этого:

create or replace trigger "APP_LOG_INSERT"
BEFORE insert on "APPLICATIONS"
for each row
begin
    INSERT INTO APP_LOG(APPLICATION_ID, SRN, APPLICATION_STATUS)
        SELECT :new.APPLICATION_ID, :new.SRN, :new.STATUS_ID
        FROM dual;
end;
person Gordon Linoff    schedule 06.11.2015
comment
Или просто values( :new.application_id, :new.srn, :new.status_id). Нет причин делать select from dual для одной строки. - person Justin Cave; 06.11.2015
comment
@ДжастинКейв. . . Вы знаете, есть ли разница в производительности? (Даже в этом случае это было бы незначительно.) Я предпочитаю insert . . . select, поэтому мне просто интересно. - person Gordon Linoff; 06.11.2015
comment
@GordonLinoff - я бы не ожидал, что будет существенная разница. Может быть, очень небольшой удар, если вы используете более старую версию Oracle, которая фактически должна была выполнить логическое чтение dual, а не оптимизировать его. - person Justin Cave; 06.11.2015