Ну, я не думаю, что вы можете отключить его. Что вы можете сделать, это создать триггер базы данных, который позаботится о вставке его значения. Вот пример:
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>
Посмотрите, поможет ли это.
Хотя нет никакого записанного правила, мы можем использовать имена столбцов от первого подзапроса в запросе на объединение для выборки результатов объединения.
Попытайтесь дать псевдоним столбцам;
select T.Col1
from (
select foo as Col1
from R
union
select bar as Col1
from S) as T;
или Если название столбца не необходимо затем T.* будет достаточно.