Здравствуйте, ZORK, Вы писали:
ZOR>Здравствуйте, vedmalex, Вы писали:
V>> ...
ZOR>Насколько я понял все эти примеры только про добавление новых записей, и они не отвечают на вопрос о том как сразу после записи получить обратно новый ID, полученный из sequence, чтобы сохранить его в записи DataSet'а. Или я что-то пропустил?
ZOR>Другими словами, вопрос: как сделать для Oracle то что для MS SQL пишется так:
ZOR>ZOR>INSERT INTO Collocation(ID, State) VALUES (@ID, @State);
ZOR>SELECT @@IDENTITY AS ID
ZOR>
ZOR>, где @@IDENTITY значение присвоенное identity-полю INSERT'ом. При этом выполняя матоде ExecuteScalar() для InsertStatement содержащий приведенный выше SQL-код, обратно получаем то самое новое @@IDENTITY.
я не совсем понял конечно тескт TSQL но что то вроде этого
create or replace procedure make_ins(IDs out Number, State in varchar2) as
declare
begin
select some_table_seq.nextval into IDs from dual;
insert into collocation(ID,State) values (IDs,'State');
end;
Можно так. Но опятьже это в хранимой процедуре.
дело в том что
при всавке данных с использованием sequense вы можете использовать
....
some_table_seq.currval;
....
но никто не гарантирует что в этот момент ктонибудь не вставил данные в эту же таблицу.
таким образом у sequence есть два метода nextval и currval для получения соответственно следующего значения и текущего, причем при вызове nextval выполняется автоматический инкремент текущего значения.
Можно так же использовать cod control sequences т.е. сами создаете объект типа таблица
где полями являются текущее значение, шаг, максимальное значение и алгоритм инкремента после достижения максимального значения и работаете.
Я надеюсь что ответил наиболее полно на ваш вопрос.
... << RSDN@Home 1.0 beta 4 >>