4
Есть ли способ получить значение из последней вставленной или обновленной строки?Получение значения первичного ключа после команды слияния?
Я использую команду merge для создания вставки или обновления, если строка существует. Я знаю, как получить автогенерированный ключ после вставки, но могу ли я получить первичный ключ, если я использую команду слияния?
Я использую Java с JDBC и Oracle DB.
Предположительно вы имеете в виду "MERGE INTO
В отличие от INSERT синтаксис Oracle MERGE не поддерживает предложение RETURNING. Увы. – APC
Что вы подразумеваете под «последней вставленной или обновленной строкой»? То есть команда MERGE не имеет порядка в том, как она будет обрабатывать данные. Я не уверен, что полезно знать, что последняя запись в случайном расположении данных. Возможно, вы могли бы предоставить схему и утверждение Merge для оценки? –
ответ
Я ударил эту проблему, используя уровни сохранения более высокого уровня. Мое решение состоит в том, чтобы сделать вставку, а затем получить результирующий идентификатор и обновление в строке. Не оптимально я понимаю, но мне еще предстоит найти лучшее решение.
Однако я обнаружил, что часто сочетание столбцов непервичного ключа дает уникальную строку. Если вы можете идентифицировать эти данные в базе данных, я рекомендую установить ограничение Unique на столбцы, чтобы они были уникальными. Если у вас есть другой способ доступа к уникальным строкам, вы можете использовать это для слияния.
источник
2009-08-07 18:43:32
Длинный снимок: вы можете написать триггер в базе данных, который отметит любое обновление или вставить, и пометьте метку времени в новом столбце, который вы назовете: последний измененный (или что-то в этом роде). Затем закажите этот столбец, чтобы получить последнюю отредактированную строку.
источник
2009-08-14 14:25:43
А до триггера вставки можно удалить все в глобальной таблице темп. «После вставки для каждой строки» может записывать введенные данные. – redcayuga
Как заявляет APC, «В отличие от INSERT синтаксис Oracle MERGE не поддерживает предложение RETURNING. Увы».
Боюсь, самый простой ответ на этот вопрос заключается в реализации бизнес-логики в функции PL/SQL, который реализует бизнес-логику и возвращает значение, которое вы заинтересованы.
Нарушение процесса на этапы в PL/SQL, чтобы проверить, существует ли уже существующая строка, не должна быть слишком медленной, как вам должно быть (я полагаю), делая прямой поиск по первичному ключу (или, по крайней мере, столбцу с уникальной индексацией)
источник
2009-08-19 14:25:22
После прочтения этого примера краткий момент отказа, в поисках какого-то способа сделать эту работу с утверждением MERGE, а затем, наконец, принимая комментарий APC, я решил использовать следующую альтернативу, которая может быть полезной для кого-то еще:
источник
2014-06-12 15:36:59 Trevor
Смежные вопросы