Informix и C: как получить последний вставленный серийный номер из типа поля bigserial

У нас есть БД с несколькими таблицами, имеющими столбец "последовательного" типа. Унаследованное приложение C записывает данные в эти таблицы и использует "sqlerrd[2]" для получения серийного номера только что вставленных данных.

insert into email(serial_number, email_id) values(0, '[email protected]')

Из-за исчерпания серийного номера мы переходим на "bigserial". Однако приведенная выше логика получения серийного номера из "sqlerrd[2]" не работает, так как он имеет тип "integer".

Какое правильное решение для этого?

Примечание. В качестве обходного пути мы в настоящее время делаем вызов ifx_getbigserial для получения серийного номера. Однако нас беспокоит наличие нескольких таблиц и одновременных транзакций, и мы не уверены, как работает этот API? В этом API не упоминается имя таблицы, и наше модульное тестирование показывает, что мы получаем правильные данные, но не уверены, правильное ли это решение.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Использование функции ifx_getbigserial() правильно. Он возвращает информацию о последнем значении BIGSERIAL, сгенерированном для текущего сеанса. Другие сеансы не повлияют на это. Однако, если вы вставляете значения в несколько таблиц, каждая из которых имеет столбец BIGSERIAL, вы должны получить вставленное значение с помощью ifx_getbigserial() после вставки в каждую таблицу и перед следующей вставкой либо в ту же таблицу, либо в любую другую таблицу со столбцом BIGSERIAL.

Считаете ли вы, что использование объекта последовательности для генерации значения является лучшим решением, чем использование этой «функции»?

Liju Mathew 01.04.2022 17:18

Это реальная функция — кавычки не нужны. Лично я бы использовал функцию, а не последовательность, но последовательность, безусловно, является альтернативой. Это не дорогая функция — она не требует обмена сообщениями с сервером и обратно; он просто извлекает некоторые данные, хранящиеся в информации о сеансе в клиентском коде.

Jonathan Leffler 01.04.2022 17:23

Какая таблица системного каталога отслеживает максимальные серийные и большие серийные значения?

FrankRuperto 05.04.2022 00:11

Информация хранится в управляющей информации таблицы, а не в системном каталоге. Последовательности разные; часть информации хранится в таблице системного каталога syssequences.

Jonathan Leffler 05.04.2022 00:12

Другие вопросы по теме