2013-08-16 4 views
4

Это настолько просто, что, возможно, уже было задано, но я не мог найти его (если это так, я прошу прощения).Вставка пустой строки

Я хотел бы вставить пустую строку на стол, чтобы я мог получить свой идентификатор (первичный ключ, сгенерированный триггером вставки) через ExecuteScalar. Данные добавляются к нему позднее в моем коде.

Мой вопрос заключается в следующем: существует ли конкретный синтаксис вставки для создания пустой записи? или я должен идти с регулярным синтаксисом вставки, таким как значения INSERT INTO (список всех столбцов) (null для каждого столбца) "?

Спасибо за ответ.

UPDATE: В Oracle ExecuteScalar on INSERT возвращает 0. Окончательный ответ представляет собой комбинацию того, что было опубликовано ниже. Сначала вам нужно объявить параметр и поднять его с помощью RETURNING.

INSERT INTO TABLENAME (ID) VALUES (DEFAULT) RETURNING ID INTO :parameterName 

Проверьте это link для получения дополнительной информации.

ответ

3

В основном, для того, чтобы вставить строку, в которой значение для всех столбцов NULL кроме первичного ключа

столбца можно выполнить простое insert заявления:

insert into your_table(PK_col_name) 
    values(1);       -- 1 for instance or null 

перед триггером вставки, которая ответственный за заполнение столбца первичного ключа

переопределяет значение в предложении values заявления insert, оставляя вас с

пустая запись исключая PK значение.

+0

+1 Но может быть лучше использовать 'DEFAULT', чем жестко закодированное значение. Тогда вставка будет работать независимо от типа, а также будет работать, если таблица будет изменена для использования трюка SYS_GUID() или новой 12c-последовательности по умолчанию. –

+0

Отлично! Я объединил оба ответа (вставьте значение DEFAULT как значение в столбец PK), и он работает точно так, как я хотел. Спасибо! – oceansmoon

4

Вам не нужно указывать каждый столбец, но вы, возможно, не сможете создать «пустую» запись. Проверьте ограничения NOT NULL на таблице. Если нет (не включая ограничение первичного ключа), тогда вам нужно будет указать только один столбец. Например:

insert into my_table (some_column) 
values (null); 

Знаете ли вы о предложении RETURNING? Вы можете вернуть этот ПК обратно в вызывающее приложение, когда вы выполняете INSERT.

insert into my_table (some_column) 
values ('blah') 
returning my_table_id into <your_variable>; 

Я бы поставил под вопрос подход. Зачем создавать пустую строку? Это могло бы означать, что на этой таблице нет ограничений, что плохо, если вы хотите иметь хорошие, чистые данные.

+0

Спасибо за ваш ответ. Я понимаю, что пустая запись может показаться неправильной практикой. Короче говоря, мне нужна пустая строка, чтобы ее идентификатор можно было сохранить в другой таблице в этот момент моего кода. Этот идентификатор затем используется как ссылка для других данных, которые пользователь может сохранить позже, однако это необходимо, когда экземпляр класса, к которому относится другая таблица, сохраняется. Таким образом, нужна пустая строка. – oceansmoon

+0

Итак, сначала вы сохраняете данные из зависимой таблицы (класса) и нуждаетесь в PK для использования в качестве FK? (Просто любопытно, не нужно отвечать) – oraclenerd

+0

Нет, я не знал о «возвращении», поэтому * + 1 *, чтобы сообщить мне, .. :) –