Нет ничего плохого в синтаксисе вашего триггера.Я могу запустить его в своей (ванильной) среде SQL * Plus:
SQL> CREATE OR REPLACE TRIGGER test_trigger
2 BEFORE INSERT ON test
3 REFERENCING NEW AS NEW FOR EACH ROW
4 BEGIN
5 SELECT test_sequence.nextval INTO :NEW.ID FROM dual;
6 END;
7 /
Trigger created.
SQL>
И вот!триггер работает:
SQL> insert into test (col1) values ('Simples!')
2 /
1 row created.
SQL> select * from test
2 /
ID COL1
---------- ------------
1 Simples!
SQL>
Все, что я могу думать, это то, что у вас есть несколько пустых строк в коде, который вы вводите.В этом случае вы можете переопределить поведение по умолчанию с помощью этой команды SQL * Plus:
SQL> set sqlblanklines on