Если у вас есть столбец с именем ref_nr
в таблице settlement
, ваш код должен работать правильно. Я думаю, что проблема во втором случае возникает из-за отсутствия части точности данных (должна быть, например, varchar2(16)
) для определения переменной как v_ref_seq varchar2
. Я бы предпочел использовать числовой тип, такой как number
или int
, для хранения значений для ref_nr
, так как все они числовые, и этот тип данных защищает данные, оставшиеся как числовые. Всякий раз, когда вам нужно выполнить запрос, вы можете использовать функцию to_char
, предотвращающую экспоненциальное отображение (select to_char(ref_nr) from settlement
).
Более того, если вы используете Oracle 12c
версию, вам не нужно создавать такую дополнительную функцию, просто измените вашу таблицу так, чтобы она была последовательностью по умолчанию для столбца:
alter table settlement
modify ref_nr default to_char(sysdate, 'yyyymmdd')||lpad(ref_seq_num.nextval, 8,'0');