2016-03-10 5 views
0

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

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

select max (id) будет работать, если бы был только один пользователь, но это не тот случай.

Есть ли способ сделать это?

Версия:

NLSRTL         11.2.0.3.0 Production 
Oracle Database 11g Enterprise Edition 11.2.0.3.0 64bit Production 
PL/SQL         11.2.0.3.0 Production 
TNS for Linux:       11.2.0.3.0 Production 
+0

https://community.oracle.com/thread/334501?tstart=0 –

+0

вы хотите текущее значение последовательность? если да, и вы используете PL/SQL Developer, чем можете проверить его в обозревателе объектов в разделе «Последовательности». Если вы этого не сделаете, посмотрите этот поток: https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:4245421000346226872 – Thomas

+0

Имеет ли таблица столбец даты/времени который установлен на вставке, которую можно использовать для определения последней строки? – MT0

ответ

2

Некоторых опции: Если есть естественный ключ, чтобы пойти с сгенерированным ID (вы вставили столбцы, которые содержат уникальный ключ), а затем выбрать для строки с теми значениями ключей будут Работа.

Вы можете использовать предложение RETURNING в инструкции insert, чтобы вернуть значение столбца ID, однако это не поддерживается во всех промежуточных соединениях.

Если триггер проверяет, было ли вы уже установили поле идентификатора на вставке и извлекаете только последовательность. Если значение передается в нуле для этого столбца, то выполните идентификационную последовательность, и введите это значение в ваш оператор вставки.

Если таблица была настроена с помощью столбцов аудита (created_user/created_Date), вы всегда можете выбрать последнюю вставленную вами строку.

+0

хорошие варианты - я проверю их – Graham

2

Вы можете использовать sequence pseudocolumnCURRVAL, чтобы получить текущее значение последовательности:

SELECT sequence_name.CURRVAL 
FROM DUAL; 
+0

Это не будет работать, если другой пользователь вставит строку между этим и вставкой – Graham

+0

Вопрос: «Как получить идентификатор последней строки, вставленной в оракул», если вы хотите получить последнюю строку вставленный конкретным пользователем или в конкретном действии, то вам, вероятно, необходимо уточнить это в вопросе. – MT0

+0

@ Грахам, это неправда. 'currval' возвращает последнее значение последовательности * для текущего сеанса *. Он никогда не вернет значение, полученное в других сеансах. –

Смежные вопросы