Начнем сначала. Допустим, мне нужно написать хранимую процедуру (Postgresql, версия 11), которая добавляла бы данные в таблицу и проверяла корректные ли данные введены пользователем.
Т.е. что-то типо этого:
CREATE PROCEDURE add_product_4 (a INT, b TIMESTAMP, c VARCHAR(20), d VARCHAR(50), e INT, f INT)
AS $$
BEGIN
INSERT INTO sales (ID, Sale_time, Pharmacy, product, Number_of_packages, Price)
VALUES (a, b, c, d, e, f);
END;
$$ LANGUAGE 'plpgsql';
Потом данная процедура вызывается, например так:
add_product_4('2', '2019.11.12 12:23:24', 'Апрель', 'Цитрамон', '18', '105');
Пока все хорошо. НО, если в последнюю переменную вставить строковое значение, то клиент выдаст ошибку:
"ERROR: ОШИБКА: неверное значение для целого числа: "df"
LINE 2: ...', '2019.11.12 12:23:24', 'Апрель', 'Цитрамон', '18', 'df');
^
SQL-состояние: 22P02
Символ: 78"
Моя же задача, чтобы данная ошибка приобрела читабельный вид.
Я попробовала сделать это так:
CREATE PROCEDURE add_product_4 (a INT, b TIMESTAMP, c VARCHAR(20), d VARCHAR(50), e INT, f INT)
AS $$
BEGIN
INSERT INTO sales (ID, Sale_time, Pharmacy, product, Number_of_packages, Price)
VALUES (a, b, c, d, e, f);
EXCEPTION
WHEN invalid_text_representation THEN
RAISE NOTICE 'Ошибка: неверный тип переменной';
END;
$$ LANGUAGE 'plpgsql';
Т.е. зная код ошибки (22P02), я зашла на сайт:
https://www.postgresql.org/docs/11/errcodes-append...
и узнала, как эта ошибка называется, после чего вставила это название после конструкции EXCEPTION WHEN. И применила конструкцию RAISE NOTICE для того. чтобы клиент теперь выводил заданный мною текст.
Но в итоге, после выполнения колла, ничего не меняется, клиент так и выводит дефолтный ответ (см. картинку).
Я смотрела видеоурок, где человек делает всё тоже самое и у него получается. я не могу понять, что я делаю не так?
Само задание получила от работодателя, т.е. это тестовое задание, поэтому так важно сделать именно так, как просят.