Получив ответ на проблему с Java, которая у меня была на прошлой неделе (спасибо!), Я перешел к новой проблеме с DB2 ... Приложение Java, над которым я работаю, берет данные из веб-формы и помещает в в файле DB2 (база данных). Строка SQL, которая передается в объект Java PreparedStatement:
insert into EVCRPTFL (
AUID, URLEX, URNEX, URNAME, URRCPT, URRUN, URRECT, URRECS, URRDYS, URRWKS, URRMHS, URRMTH, URRDAY, URRTHE, URRWHT, URRWDY, UREXPT, UROCRM, UROCRN, UREXPR, URSTTS, URACTV, URRPT, URD1YR, URD1YN, URD1MR, URD1MN, URD1DR, URD1DN, URD2YR, URD2YN, URD2MR, URD2MN, URD2DR, URD2DN, URRPAR, URLANG, URCTRY
)
values (
?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?
)
Вот скрипт создания таблицы:
CREATE TABLE EVCRPTFL (
URID int NOT NULL,
AUID decimal(11,0) NOT NULL,
URLEX timestamp,
URNEX timestamp,
URNAME varchar(40) NOT NULL,
URRCPT varchar(500) NOT NULL,
URRUN timestamp,
URRECT char(1) NOT NULL,
URRECS int NOT NULL,
URRDYS int NOT NULL,
URRWKS int NOT NULL,
URRMHS int NOT NULL,
URRMTH int NOT NULL,
URRDAY int NOT NULL,
URRTHE int NOT NULL,
URRWHT int NOT NULL,
URRWDY int NOT NULL,
UREXPT int NOT NULL,
UROCRM int NOT NULL,
UROCRN int NOT NULL,
UREXPR timestamp,
URSTTS char(1) NOT NULL,
URACTV timestamp,
URRPT int NOT NULL,
URD1YR int,
URD1YN int,
URD1MR int,
URD1MN int,
URD1DR int,
URD1DN int,
URD2YR int,
URD2YN int,
URD2MR int,
URD2MN int,
URD2DR int,
URD2DN int,
URRPAR varchar(1000),
URLANG char(2),
URCTRY char(2)
);
CREATE UNIQUE INDEX EVCRPTFL ON EVCRPTFL(URID);
Как видите, он передает все значения в строке SQL, кроме первого, URID. После того, как запись вставлена, я могу видеть ее в базе данных с идентификационным номером, что означает для меня, что база данных автоматически добавляет URID (то есть идентификатор не генерируется в коде Java, а затем передается в базу данных ). В моем предыдущем опыте работы с Oracle и PHP я использовал Oracle Sequence для создания полей с автонумерацией, и я знаю, что в MySQL, Postgres и, возможно, в других системах баз данных есть примерно одинаковые функции, но я не смог найти, как автонумерация работает в DB2.
Мой коллега, который больше знаком с DB2, также озадачен; он говорит, что в таблице нет триггеров, настроенных на то, на что он смотрел, и что, как правило, в коде RPG здесь звучит так, что идентификационные номера генерируются в коде и затем передаются в базу данных, а не генерируются базой данных. сам по себе.
Так что мой вопрос таков: уникальный индекс для URID также автоматически генерирует идентификационные номера или есть что-то еще, что мне нужно искать в базе данных или в коде Java?
И мой следующий вопрос: мне в конечном итоге потребуется использовать номер URID для вставки в другую таблицу, в которой хранятся связанные данные. В Oracle это было сделано с помощью команды «вставить в возвращение в», а затем вернуть данные из параметризованной id_variable в коде. Есть ли аналогичная функция в DB2? Я нашел документацию по функции IDENTITY_VAL_LOCAL, но не похоже, что я всегда могу гарантировать, что она вернет правильный идентификатор, например, если произойдет другая вставка из веб-формы между первой вставкой и вызовом IDENTITY_VAL_LOCAL ...
Я могу предоставить примеры кода или другую информацию базы данных, если это необходимо. Спасибо!