telnov_magic
@telnov_magic
Между небом и омутом, между серпом и молотом

Как проверить пустое ли поле?

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

· eсли не указано имя клиента – оно генерируется по схеме – Klient + уникальный номер из последовательности;

Как проверить указано имя клиента или нет? Пытался сравнивать с NULL и '', не работает.

Приведу код который написал, сильно не ругайте, я только вникаю в это все
create or replace function addClient()
returns trigger as $$
	Declare
		newCity int;
		newName varchar(20);
		newId int;
		newVolume int;
	Begin
		if new.name == '' then
			newName = 'Klient' || make_uid();
		else newName = new.name;
		end if;		

		if new.city == '' then
			newCity = 3;
		else newCity = new.city;
		end if;		

		newId = new.id;
		
		if new.volume == '' then
			if newCity == 3 then
				newVolume = 5;
			else newVolume = 0;
			end if;
		else newVolume = new.volume;
		end if;
		
		insert into client (id, name, city, volume) values (newId, newName, newCity, newVolume);

		return new;
	END;
$$language plpgsql;
  • Вопрос задан
  • 159 просмотров
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Оператор сравнения в plpgsql такой же как в SQL. is null для проверки является ли значение null и = для равенства.

Для изменения вставляемой строки вы должны модифицировать переменную new, а не пытаться уйти в бесконечную рекурсию выполняя аналогичную вызвавшему триггер операцию.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы