Можно ли определить серийный тип данных, который автоматически увеличивается при обновлении строки? - PullRequest
1 голос
/ 05 июля 2010

Когда новая строка добавляется в таблицу, содержащую последовательный столбец, следующее наибольшее целочисленное значение присваивается этому столбцу при фиксации строки.Могу ли я определить серийный тип данных, который будет автоинкрементироваться при обновлении строки с ранее назначенным последовательным значением?В базе данных?В настоящее время я использую следующие функции для целочисленного столбца let intcol = select max(intcol) + 1 from table.В моем приложении, когда клиент делает ставку интереса, предыдущий номер билета обновляется следующим доступным номером билета.

Ответы [ 3 ]

2 голосов
/ 05 июля 2010

Я думаю, вам понадобится триггер " ПОСЛЕ ОБНОВЛЕНИЯ ", возможно, вместе с последовательностью , чтобы избежать накладных расходов при подсчете max из таблицы.

Iничего не знаю об Informix, и скажем, я понимаю ваше утверждение "let intcol ...";) Но, например, для воссоздания функциональности MySQL с автоинкрементом с инструментами Oracle вам нужен код, подобный следующему:

create sequence mytable_seq start with 1 increment 1;

create or replace trigger mytable_insert before insert 
for each row
begin
   select mytable_seq.nextval into :new.intcol from dual;
end;
2 голосов
/ 05 июля 2010

Из некоторых других ваших вопросов я понимаю, что вы используете довольно древнюю версию Informix.

Относительно недавние версии (10+, возможно, чуть раньше) поддерживают SEQUENCE, что будет делать именно то, что вам нужно:

CREATE SEQUENCE mytable_version 
INCREMENT BY 1 START WITH 1;

Тогда в вашем обновлении:

UPDATE mytable
SET (payment, version) = (:pymt_amt, mytable_version.next_val)
WHERE ...

Каждое обновление приведет к обновлению столбца версии новым порядковым номером.

Если в вашем приложении слишком много различных операторов UPDATE или методов доступа, которыми вы не можете управлять так, как вам хотелось бы, вы можете рассмотреть возможность создания UPDATE для версии как часть триггера UPDATE.

0 голосов
/ 05 июля 2010

Для Oracle, нет.

Обычно выполняется с триггером и последовательностью перед вставкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...