Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 прочитать последнюю вставленную запись  [new]
Alex_nv
Member

Откуда:
Сообщений: 45
Добрый день!

В моей таблице одно ключевое поле, которое добавляется с помощью Sequence.
Как мне прочитать это поле после вставке записи в таблицу.
Вот код:

DataSet sigDS;
oradb_ALL_SIGNALS_Desc.InsertCommand = new OracleCommand("INSERT INTO ALL_SIGNALS (SEQ_NEW_SIG.NextVal,, sig_type, sig_name) " +
"VALUES (:psig_type, :psig_name)", oraSc);

oradb_ALL_SIGNALS_Desc.Fill(sigDS, 0, 1, “ALL_SIGNALS”);

Row = sigDS.Tables[“ALL_SIGNALS”].NewRow();
Row["sig_type"] = 2;
Row["sig_name"] = “dts”;
sigDS.Tables[“ALL_SIGNALS”].Rows.Add(Row);
oradb_ALL_SIGNALS_Desc.Update(sigDS, "ALL_SIGNALS");

Здесь писали, что в MS SQL это можно сделать выполнив запрос
SELECT @@IDENTITY или SELECT * FROM [YouTable] WHERE ID=@@IDENTITY

А есть ли что-то аналогичное в Oracle?
11 янв 07, 11:12    [3625540]     Ответить | Цитировать Сообщить модератору
 Re: прочитать последнюю вставленную запись  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
1.
INSERT INTO ... VALUES ... RETURNING ... INTO ...
2. SEQ_NEW_SIG.CurVal
11 янв 07, 11:14    [3625560]     Ответить | Цитировать Сообщить модератору
 Re: прочитать последнюю вставленную запись  [new]
Бабичев Сергей
Member

Откуда:
Сообщений: 2498
SEQ_NEW_SIG.CurrVal ???
11 янв 07, 11:15    [3625561]     Ответить | Цитировать Сообщить модератору
 Re: прочитать последнюю вставленную запись  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116244
Читайте про RETURNING- Clause в INSERT
11 янв 07, 11:15    [3625566]     Ответить | Цитировать Сообщить модератору
 Re: прочитать последнюю вставленную запись  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116244
Бабичев Сергей
SEQ_NEW_SIG.CurrVal ???


Ммм. Обычно так тоже получится, но не всегда :-)
11 янв 07, 11:16    [3625580]     Ответить | Цитировать Сообщить модератору
 Re: прочитать последнюю вставленную запись  [new]
Alex_IZA
Member

Откуда:
Сообщений: 287
>SEQ_NEW_SIG.CurrVal ???


Да курвал но только в той сесии которая вставляла последнюю запись.
11 янв 07, 11:17    [3625593]     Ответить | Цитировать Сообщить модератору
 Re: прочитать последнюю вставленную запись  [new]
Alex_nv
Member

Откуда:
Сообщений: 45
а как мне прочитать SEQ_NEW_SIG.CurrVal
11 янв 07, 11:36    [3625796]     Ответить | Цитировать Сообщить модератору
 Re: прочитать последнюю вставленную запись  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
Alex_nv
а как мне прочитать SEQ_NEW_SIG.CurrVal
Лучше бы обойтись без него. Это не безопасный вариант. Лучше скажите - Вы читаете сразу после insert?
11 янв 07, 11:38    [3625822]     Ответить | Цитировать Сообщить модератору
 Re: прочитать последнюю вставленную запись  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
Alex_nv
а как мне прочитать SEQ_NEW_SIG.CurrVal


SELECT SEQ_NEW_SIG.CurrVal FROM dual

А вообще, если все делается в одном месте, можешь прочитать NextVal в переменную и уже на нее сослаться в VALUES
11 янв 07, 11:39    [3625829]     Ответить | Цитировать Сообщить модератору
 Re: прочитать последнюю вставленную запись  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116244
А почему наш симпатичный RETURNING полностью выброшен на свалку истории ?
11 янв 07, 11:40    [3625845]     Ответить | Цитировать Сообщить модератору
 Re: прочитать последнюю вставленную запись  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
Кстати, только что обратил внимание, что написана чушь
INSERT INTO ALL_SIGNALS (SEQ_NEW_SIG.NextVal

NexVal д.б. в VALUES вообще-то
11 янв 07, 11:41    [3625852]     Ответить | Цитировать Сообщить модератору
 Re: прочитать последнюю вставленную запись  [new]
Бабичев Сергей
Member

Откуда:
Сообщений: 2498
dmidek
Бабичев Сергей
SEQ_NEW_SIG.CurrVal ???


Ммм. Обычно так тоже получится, но не всегда :-)
Таки я не отвечал, а поправлял tru55.
Сорри, если кого-то это ввело в заблуждение :)
11 янв 07, 11:42    [3625860]     Ответить | Цитировать Сообщить модератору
 Re: прочитать последнюю вставленную запись  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116244
Бабичев Сергей
dmidek
Бабичев Сергей
SEQ_NEW_SIG.CurrVal ???


Ммм. Обычно так тоже получится, но не всегда :-)
Таки я не отвечал, а поправлял tru55.
Сорри, если кого-то это ввело в заблуждение :)


Пардон :-)
11 янв 07, 11:44    [3625872]     Ответить | Цитировать Сообщить модератору
 Re: прочитать последнюю вставленную запись  [new]
Alex_nv
Member

Откуда:
Сообщений: 45
tru55
Кстати, только что обратил внимание, что написана чушь
INSERT INTO ALL_SIGNALS (SEQ_NEW_SIG.NextVal

NexVal д.б. в VALUES вообще-то


действительно чушь - оибся когда код переписывал из си:

oradb_ALL_SIGNALS_Desc.InsertCommand = new OracleCommand("INSERT INTO ALL_SIGNALS (sig_id, sig_type, sig_name) " +
"VALUES (SEQ_NEW_SIG.NextVal, :psig_type, :psig_name)", oraSc);
11 янв 07, 11:55    [3625961]     Ответить | Цитировать Сообщить модератору
 Re: прочитать последнюю вставленную запись  [new]
Alex_nv
Member

Откуда:
Сообщений: 45
спасибо
SELECT SEQ_NEW_SIG.CurrVal FROM dual
то что надо
11 янв 07, 12:00    [3626017]     Ответить | Цитировать Сообщить модератору
 Re: прочитать последнюю вставленную запись  [new]
Alex_nv
Member

Откуда:
Сообщений: 45
dmidek
А почему наш симпатичный RETURNING полностью выброшен на свалку истории ?


а где почитать как его использовать?
11 янв 07, 12:04    [3626059]     Ответить | Цитировать Сообщить модератору
 Re: прочитать последнюю вставленную запись  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116244
Alex_nv
dmidek
А почему наш симпатичный RETURNING полностью выброшен на свалку истории ?


а где почитать как его использовать?


А где же еще ? В доку конечно.

RETURNING INTO Clause
11 янв 07, 12:07    [3626074]     Ответить | Цитировать Сообщить модератору
 Re: прочитать последнюю вставленную запись  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
Alex_nv
dmidek
А почему наш симпатичный RETURNING полностью выброшен на свалку истории ?


а где почитать как его использовать?


Уже написал же выше
DECLARE
  NewId  number;
BEGIN
  INSERT INTO tab1(id1, fld1) VALUES(Seq1.NextVal, 'XX') RETURNING id1 INTO NewId;
END;
извини, на PL/SQL
11 янв 07, 12:08    [3626088]     Ответить | Цитировать Сообщить модератору
 Re: прочитать последнюю вставленную запись  [new]
Alex_nv
Member

Откуда:
Сообщений: 45
tru55
Alex_nv
dmidek
А почему наш симпатичный RETURNING полностью выброшен на свалку истории ?


а где почитать как его использовать?


Уже написал же выше
DECLARE
  NewId  number;
BEGIN
  INSERT INTO tab1(id1, fld1) VALUES(Seq1.NextVal, 'XX') RETURNING id1 INTO NewId;
END;
извини, на PL/SQL


а в обычном SQL его можно использовать?
я пишу на СИ, а он не позволяет использовать PL/SQL
11 янв 07, 12:19    [3626200]     Ответить | Цитировать Сообщить модератору
 Re: прочитать последнюю вставленную запись  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116244
Alex_nv

а в обычном SQL его можно использовать?
я пишу на СИ, а он не позволяет использовать PL/SQL


Можно.

RETURNING Clause of INSERT
11 янв 07, 12:23    [3626238]     Ответить | Цитировать Сообщить модератору
 Re: прочитать последнюю вставленную запись  [new]
Peter_VP
Member

Откуда: Москва
Сообщений: 83
ID - имя ключевого столбца Вашей таблицы, v_id - переменная.
Сразу после вставки записи выполнить
select Max(ID) 
into v_id 
from ALL_SIGNALS;
11 янв 07, 14:52    [3627524]     Ответить | Цитировать Сообщить модератору
 Re: прочитать последнюю вставленную запись  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
Peter_VP
ID - имя ключевого столбца Вашей таблицы, v_id - переменная.
Сразу после вставки записи выполнить
select Max(ID) 
into v_id 
from ALL_SIGNALS;


Еще один любитель MAX
11 янв 07, 14:54    [3627538]     Ответить | Цитировать Сообщить модератору
 Re: прочитать последнюю вставленную запись  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116244
Peter_VP
ID - имя ключевого столбца Вашей таблицы, v_id - переменная.
Сразу после вставки записи выполнить
select Max(ID) 
into v_id 
from ALL_SIGNALS;


Сразу ! Только очень - очень быстро
Нет, это неверно. Вас могут обогнать другие пользователи ...
Про циклические последовательности я вообще молчу .
11 янв 07, 14:55    [3627546]     Ответить | Цитировать Сообщить модератору
 Re: прочитать последнюю вставленную запись  [new]
Peter_VP
Member

Откуда: Москва
Сообщений: 83
dmidek
Peter_VP
ID - имя ключевого столбца Вашей таблицы, v_id - переменная.
Сразу после вставки записи выполнить
select Max(ID) 
into v_id 
from ALL_SIGNALS;


Сразу ! Только очень - очень быстро
Нет, это неверно.

В каких-то случаях ВЕРНО, в каких-то нет. Готовых рецептов на все случаи жизни нет.

Вас могут обогнать другие пользователи ...

Про циклические последовательности я вообще молчу.

Я думаю, циклические последовательности для генерации первичных ключей РАЗУМНЫЕ люди использовать не будут.

11 янв 07, 15:00    [3627591]     Ответить | Цитировать Сообщить модератору
 Re: прочитать последнюю вставленную запись  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
А как насчет "обогнать"?
Подобное решение хорошо только для однопользовательской системы, причем об этом уже многократно говорилось
11 янв 07, 15:03    [3627633]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить