Я поймаю это исключение, когда Java из кучи. Если я попытаюсь поместить в ОЗУ множество элементов данных - сначала я поймаю «Сбой связи» и следующий «OutOfMemoryError».
Я зарегистрировал его, и я уменьшаю потребление памяти (удаляю данные 1/2) и все в порядке.
Oracle использует последовательности в качестве столбцов идентификации, если можно так сказать.
Если вы установили последовательность для первичного ключа вашей таблицы, вам также необходимо написать триггер, который будет вставлять Sequence.NextValue или около того в поле первичного ключа.
Предполагая, что вы уже знакомы с этой концепцией, просто запросите свою последовательность, и тогда вы получите ответ. Что очень практикуется в Oracle, так это создание функции, которая будет возвращать INT, а затем внутри вашей функции вы выполняете свой INSERT. Предполагая, что вы правильно настроили свой триггер, вы сможете вернуть значение своей последовательности, запросив его.
Вот пример:
CREATE TABLE my_table (
id_my_table INT PRIMARY KEY
description VARCHAR2(100) NOT NULL
)
CREATE SEQUENCE my_table_seq
MINVALUE 1
MAXVALUE 1000
START WITH 1
INCREMENT BY 2
CACHE 5;
Если вы хотите управлять автоинкрементом самостоятельно, вот как:
INSERT INTO my_table (
id_my_table,
description
) VALUES (my_table_seq.NEXTVAL, "Some description");
COMMIT;
С другой стороны, если вы не хотите заботиться об увеличении ПЕРВИЧНОГО КЛЮЧА,
Если вы используете Oracle, вы должны использовать ExecuteNonQuery и ResultParameter. Невозможно записать это как запрос.
using (OracleCommand cmd = con.CreateCommand()) {
cmd.CommandText = "insert into foo values('foo','bar') returning id into :myOutputParameter";
cmd.Parameters.Add(new OracleParameter("myOutputParameter", OracleDbType.Decimal), ParameterDirection.ReturnValue);
cmd.ExecuteNonQuery(); // an INSERT is always a Non Query
return Convert.ToDecimal(cmd.Parameters["myOutputParameter"].Value);
}