Re[3]: Автогенерация ID при добавлении данных из DataSet в Б
От: vedmalex Россия  
Дата: 06.01.03 10:11
Оценка:
Здравствуйте, 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 >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.