автоматическое увеличение номера записи для каждой вставки в конкретную таблицу - PullRequest
0 голосов
/ 06 декабря 2011

Я использовал этот код и впоследствии создал функцию триггера.он работает нормально, если в поле номера записи (eno) уже есть значение, но не работает, если поле имеет значение null

CREATE OR REPLACE FUNCTION eno_inc() RETURNS TRIGGER AS $eno_inc$
DECLARE
enmb INTEGER; 
BEGIN
select max(eno) into enmb from entry;
new.eno := enmb + 1;
return new;
END;
$eno_inc$
LANGUAGE plpgsql;

как мне решить эту проблему ??PS Я не могу использовать 'serial' или 'sequence', потому что организатор курса хочет триггер для этой функции

Ответы [ 2 ]

1 голос
/ 06 декабря 2011

Итак, вам нужно специализированное поведение, которое срабатывает только в конкретном случае, когда поле равно нулю .

Таким образом, вы в основном ответили на свой вопрос:

  CASE WHEN enmb IS NULL THEN new.eno := 1;
  ELSE new.eno := enmb + 1;
  END CASE
0 голосов
/ 06 декабря 2011

Использование COALESCE (что является стандартным SQL):

Функция COALESCE возвращает первый из своих аргументов, который не является нулевым. Null возвращается, только если все аргументы нулевые.

Так что-то вроде этого должно дать вам ноль в enmb, когда entry пуст вместо вашего текущего NULL:

select coalesce(max(eno), 0) into enmb from entry;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...