ОШИБКА: столбец "существует" не существует в команде вставки SQL - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь немного узнать о триггерах и хочу создать триггер, который будет проверять, добавляю ли я новую строку в мою таблицу прогнозов, из которой (город, тип события, несчастные случаи)

, что, если число погибших в новой строке выше, чем в городе, я получу сообщение об ошибке, и новая строка не будет вставлена ​​в мою таблицу прогнозирования

вот мой код

создание моего триггера

create trigger T1
before insert on prediction
for each row
execute procedure trigf1();

создание trigf1 ();

create or replace function trigf1() returns trigger as $$
declare bad_population record;
Begin
  select city.cname INTO bad_population
  from city
  where new.casualties>city.population and new.cname=city.cname;

  if exists bad_population then begin 
    raise notice 'bad population-more casualites than city population';
    return null;
  end;
  else
    return new;
  end if;
end;
$$language plpgsql;

я получаю сообщение об ошибке при попытке ввести эти значения

insert into prediction values ('Naples', 'Volcano', 3056)

и это ошибка

ERROR:  column "exists" does not exist
LINE 1: SELECT exists bad_population
               ^
QUERY:  SELECT exists bad_population
CONTEXT:  PL/pgSQL function trigf1() line 7 at IF
SQL state: 42703

Таблица моего города

my City Table

моя таблица прогнозов

my prediction table

хотел бы, чтобы вы помогли понять ошибку и решить мою проблему

1 Ответ

0 голосов
/ 30 октября 2018

Использование FOUND: IF FOUND THEN.

Если по вашему запросу были получены какие-либо результаты, FOUND будет ИСТИНА, иначе ЛОЖЬ.

EXISTS принимает запрос, который возвращает TRUE или FALSE в зависимости от того, возвращает ли запрос какие-либо результаты, например, IF EXISTS (SELECT 1 FROM table WHERE condition) THEN...

Таким образом, основное отличие состоит в том, что FOUND - это переменная, которая устанавливается после возврата вашего запроса / оператора и устанавливается в значение ИСТИНА / ЛОЖЬ в зависимости от того, вернул ли ваш оператор SELECT какие-либо результаты или оператор UPDATE / DELETE повлиял на какие-либо строки ,

EXISTS с другой стороны, это оператор, который возвращает TRUE / FALSE на основе запроса, который вы ему предоставляете в тот момент времени.

...