Ну, я не думаю, что вы можете отключить это. Что вы можете сделать, это создать триггер базы данных, который позаботится о вставке его значения. Вот пример:
SQL> create table test (id number, col varchar2(20));
Table created.
SQL> create sequence seq_test;
Sequence created.
SQL> create or replace trigger trg_bi_test
2 before insert on test
3 for each row
4 begin
5 :new.id := nvl(:new.id, seq_test.nextval);
6 end;
7 /
Trigger created.
SQL> insert into test (col) values ('Little');
1 row created.
SQL> insert into test (col) values ('Foot');
1 row created.
SQL> select * from test;
ID COL
---------- --------------------
1 Little
2 Foot
SQL>
Как видите, вам не нужно сначала извлекать его значение, об этом позаботится база данных. Обратите внимание, что производительность, вероятно, пострадает, если вы загрузите много данных, так как триггер сработает для каждой вставленной строки.
Для пользователей, которые используют «старый» подход (который у вас есть), ничего не меняется:
SQL> insert into test (id, col) values (seq_test.nextval, 'Stack');
1 row created.
SQL> select * from test;
ID COL
---------- --------------------
3 Stack
1 Little
2 Foot
SQL>
Посмотрите, поможет ли это.