Nano Hash - криптовалюты, майнинг, программирование

Прочитать значение последовательности после вставки с помощью триггера?

Я разрабатываю небольшое приложение на Pro*C, но у меня есть вопрос по одной из основных функций.

У меня есть триггер автоматического увеличения для идентификатора каждой таблицы, поэтому перед вставкой строки в таблицу триггер устанавливает идентификатор строки.

Проблема здесь в том, что я хочу получить значение последовательности после isert (чтобы получить идентификатор вставленной строки), но что происходит, когда две транзакции пытаются вставить строку? Если я использую уровень фиксации чтения и фиксирую транзакцию после вставки строки и получения ее значения, могут возникнуть проблемы? Что я должен делать? Спасибо!


  • Как вы в настоящее время получаете значение? Запрашивая currval (в том же сеансе, даже если он зафиксирован), с предложением returning или как-то еще? 17.05.2016
  • Я получаю значение после оператора вставки, запрашивая currval 17.05.2016
  • Хорошо, а две транзакции, выполняющие вставки, находятся в разных сеансах? Они независимы, currval является локальным для сеанса. У вас действительно есть проблема или вы просто выясняете, безопасно ли то, что вы делаете? 17.05.2016
  • Вставки будут в разные сеансы, я просто выяснял, как это сделать безопасно. Но, как вы сказали, если значения независимы для каждого сеанса, у меня не будет проблем, верно? 17.05.2016
  • currval совершенно безопасен для этого 17.05.2016

Ответы:


1

Для двух сеансов безопасно независимо вставлять строки и ссылаться на currval, так как он является локальным для сеанса.

Документация не говорит об этом ясно:

... Любая ссылка на CURRVAL всегда возвращает текущее значение последовательности, которое является значением, возвращаемым последней ссылкой на NEXTVAL.

Прежде чем использовать CURRVAL для последовательности в вашем сеансе, вы должны сначала инициализировать последовательность с помощью NEXTVAL.

В совокупности они показывают, что это безопасно, но первая часть не дает понять, что это последняя ссылка на NEXTVAL в текущем сеансе. Тем не менее, он говорит:

Последовательность может быть доступна многим пользователям одновременно без ожидания или блокировки.

Однако вам не нужно делать запрос, чтобы получить идентификатор, вы можете использовать пункт returning into

insert into your_table (col1, ...) values (:val1, ...)
returning id into :id;
17.05.2016
  • Спасибо за ваш подробный ответ. Здесь я буду использовать предложение returning. Я не знаю, смогу ли я использовать его с Pro*C. 17.05.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..