Oracle сообщает о плохой переменной привязки, если вы пытаетесь ссылаться на что-то с :NEW
, что это не столбец в таблице назначения. В этом случае может потребоваться указать значение привязки, поскольку инструкция неверна.
The NEW
pseudorecord относится к строке в таблице запуска, на которую влияет инструкция. Вам не нужно (и не обязательно) включать имя таблицы, когда вы используете поле псевдослужбы, поэтому :new.t1.ID
должно быть только :new.ID
.
К get the next value from the sequence необходимо использовать nextval
, вы можете не только указать название последовательности.
Ваши предложения также в неправильном порядке, вам нужно событие DML (вставить) befroe целевой таблицы.
CREATE TRIGGER tr_inc_pers BEFORE INSERT ON t1
FOR EACH ROW
BEGIN
select s_inc_pers.nextval into :new.ID from DUAL;
END;
Как вы используете 11g вам даже не нужно выбирать из двух, you can just assign the column value:
CREATE TRIGGER tr_inc_pers BEFORE INSERT ON t1
FOR EACH ROW
BEGIN
:new.ID := s_inc_pers.nextval;
END;
Это обычно помогает людям ответить быстрее и лучше, если вы включите вид проблем, которые вы испытываете в исходном вопросе: например, сообщения об ошибках или поведение, которое вы испытываете, и как оно отличается от того, что вы ожидаете –