Oracle: вставить без спецификации столбцов - PullRequest
7 голосов
/ 15 июля 2011

У меня есть таблица оракула с последовательностью и триггером для автоинкрементации столбца. Теперь я хочу сделать вставку. Обычно я должен написать:

INSERT INTO table (column1, column2,...) VALUES (value1, value2)

но я просто хочу вставить запись без значений по умолчанию. Как это сделать в Oracle?

`Mysql`: INSERT INTO table () VALUES ()

`Mssql`: INSERT INTO table default VALUES 

`Oracle:` INSERT INTO table (column1, column2,...) VALUES (default, default,...)

Это единственный способ? Я должен перечислить все столбцы?

Ответы [ 5 ]

7 голосов
/ 15 июля 2011
INSERT INTO table (column1) VALUES (default);

Остальное будет по умолчанию!

5 голосов
/ 15 июля 2011

В Oracle вы НЕ ДОЛЖНЫ указывать столбцы, но если вы этого не сделаете, вы будете открыты для введения ошибок по мере изменения определения таблицы.

Вы можете вставить с помощью:

INSERT INTO t VALUES (значение1, значение2, значение3);

Предполагается, что таблица t имеет три столбца

Гораздо лучше и удобнее вставлять:

INSERT INTO t (столбец1, столбец2, столбец3) ЗНАЧЕНИЯ (значение1, значение2, значение3);

Я бы не стал использовать PL / SQL (если вы можете помочь), поскольку вы вводите переключение контекста с PL / SQL на SQL, а затем снова возвращаетесь к PL / SQL.

4 голосов
/ 15 июля 2011

Это единственный способ?Я должен перечислить все столбцы?

Да.Рекомендуется всегда указывать все столбцы в операторе INSERT, для которых вы хотите указать значения.

3 голосов
/ 15 июля 2011

Я пропустил эту часть при первом прочтении:

У меня есть таблица оракула с последовательностью и триггером для автоинкремента столбец.

Итак, я предполагаю, что на PK есть столбец, заполненный с использованием последовательности, а все остальные имеют значения по умолчанию. Учитывая это, я бы сделал это:

INSERT INTO table (pk_column) VALUES (NULL);

Триггер переопределит значение NULL (и если этого не произойдет по какой-либо причине, вставка не будет выполнена); остальные столбцы будут заполнены значениями по умолчанию.

0 голосов
/ 25 мая 2018

Существует только один случай, когда вам не нужно указывать COLUMNS в Oracle, и это когда вы вставляете строки со значениями, указанными для всех столбцов, и это тоже в той же последовательности, что и определение таблицы , Во всех остальных случаях необходимо указывать список столбцов.

Пример:

create table tt (id number, name varchar2(30));
insert into tt values (1,'AC');
insert into tt values ('2',1);

Особенно обратите внимание, что 2-й оператор вставки -> Первый параметр '2' указан в виде строки, а ожидание - это число в столбце идентификатора. Здесь делает необходимое литье и вставляет 2 в столбец ID. Но пользователь, возможно, хотел вставить '2' в столбце NAME и 1 в качестве идентификатора. С указанием списка столбцов Oracles помогает нам избежать таких ошибок.

Кроме того, в редкие дни возникнет ситуация, когда вам НЕ НУЖНО указывать список столбцов, поскольку почти все созданные таблицы в основном имеют столбец уникального идентификатора с автоматическим увеличением, который автоматически заполняется с помощью Trigger или из-за Столбцы IDENTITY , и вы указываете значения остальных столбцов только в том случае, если список этих столбцов должен быть предоставлен, иначе это приведет к ошибке.

В случае, если этот уникальный идентификатор генерируется и вставляется приложением, скажем, сгенерированным в Java-приложении с помощью генерации случайных чисел или Hibernate , тогда, поскольку все столбцы будут вставлены, списка столбцов можно было бы избежать.

...