planetz Ответов: 1

Как получить oracle nextval в переменную сразу после того, как она назначена некоторой строке в базе данных


Всем Привет,

То, что я пытаюсь сделать, - это создать уникальные идентификаторы для запросов, созданных пользователями.

Я использую последовательность oracle для назначения идентификатора запроса, который является первичным ключом в таблице.

После создания запроса я хочу отобразить созданный идентификатор запроса, который в основном представляет собой последовательность no.

Спасибо тебе..!!

Что я уже пробовал:

Во-первых, отображение sequence.currval не гарантирует правильного выхода, потому что в течение этого времени другой пользователь может вставить запрос в базу данных.

Во-вторых, если я выберу идентификатор, созданный пользователем x точно в момент y, это может сработать. Но для этого требуется выполнить еще один запрос.

Есть ли какой-то альтернативный путь?

GKP1992

Насколько я понимаю, вы вставляете запрос в таблицу с идентификатором запроса в качестве первичного ключа. Это верно? Кроме того, какую версию Oracle вы используете?

planetz

Да GKP1992, что является правильным. Я использую oracle 10g.

1 Ответов

Рейтинг:
2

GKP1992

Привет,

Для этого можно использовать предложение returning.

Пример:

INSERT INTO {query_table} (query_id, query)
   VALUES (sequence.nextval, query_From_User)
RETURNING query_id into {a_defined_variable}


Это даст вам идентификатор вставленной записи.


planetz

этот запрос должен быть в процедуре. так ведь? иначе где я могу объявить 'a_defined_variable'?

GKP1992

Я думаю, что это называется блоком в Oracle. Идет вот так

объявить {имя_переменной} {тип} := {значение};
начать
{напишите запрос, который использует var здесь.}
конец