Имена столбцов для таблицы, сформированной ОБЪЕДИНЕНИЕМ

Ну, я не думаю, что вы можете отключить его. Что вы можете сделать, это создать триггер базы данных, который позаботится о вставке его значения. Вот пример:

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>

Посмотрите, поможет ли это.

9
задан Dan Homerick 26 November 2008 в 08:13
поделиться

2 ответа

Хотя нет никакого записанного правила, мы можем использовать имена столбцов от первого подзапроса в запросе на объединение для выборки результатов объединения.

13
ответ дан 4 December 2019 в 07:05
поделиться

Попытайтесь дать псевдоним столбцам;

select T.Col1
from (
    select foo as Col1
    from R
    union
    select bar as Col1
    from S) as T;

или Если название столбца не необходимо затем T.* будет достаточно.

13
ответ дан 4 December 2019 в 07:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: