В последние часы я застрял в проблеме: мне нужна настраиваемая ошибка («Неверный идентификатор авиакомпании. Пожалуйста, проверьте введенные данные еще раз») вместо обычного кода ошибки (вставка или обновление таблицы «flightplan» нарушает ограничение внешнего ключа «fk_flightplan_airline» ).

Но что бы я ни пытался, всегда получаю стандартную ошибку. Пожалуйста помоги.

CREATE OR REPLACE FUNCTION add_flight(
  PLAN_ID INT,
  AIRLINE_ID INT,
  STATUS_ID INT)
  RETURNS void AS $BODY$
  BEGIN
  INSERT INTO flight.flightgplan VALUES(
    PLAN_ID,
    AIRLINE_ID,
    STATUS_ID);
  IF airline_id > 8 THEN RAISE EXCEPTION USING errcode = 99881;
  ELSE IF status_id > 10 THEN RAISE EXCEPTION USING errcode = 99882;
  END IF;
 EXCEPTION
  WHEN SQLSTATE '99881' THEN raise EXCEPTION 'Wrong airline_id. Please check your input again';
  WHEN SQLSTATE '99882' THEN raise EXCEPTION 'Wrong status_id. Please check your input again';
  END;
$BODY$ LANGUAGE plpgsql;
1
trytolearn 8 Дек 2020 в 21:08

1 ответ

Лучший ответ

Перед выполнением вставки должны быть сгенерированы пользовательские исключения, чтобы вставка не выполнялась:

IF airline_id > 8 THEN RAISE EXCEPTION USING errcode = 99881;
ELSE IF status_id > 10 THEN RAISE EXCEPTION USING errcode = 99882;
END IF;
INSERT INTO flight.flightgplan VALUES(
    PLAN_ID,
    AIRLINE_ID,
    STATUS_ID);
2
peprumo 8 Дек 2020 в 18:16