MySQL: создание функции с оператором выбора + расчет
Мне нужна ваша помощь. Я должен создать функцию, которая рассчитывает стоимость рецепта по рецепту. Формула должна быть такой:
цена лекарства х дозировка х потолок (дуарция /24 часа)
Сигнатура функции:
Стоимость рецепта (mname varchar(100), дозировка int, длительность)
DELIMITER $$
CREATE FUNCTION prescription_costs (mname varchar(100), dosage int, duration time) RETURNS INT
BEGIN
DECLARE prescription_costs INT;
IF mname < 0 THEN
SET prescription_costs = 0;
ELSEIF dosage < 0 THEN
SET prescription_costs = 0;
ELSEIF duration < 0 THEN
SET prescription_costs = 0;
ELSE
SET prescription_costs = price*dosage*ceiling(duration/24);
END IF;
RETURN (prescription_costs);
END;
$$
DELIMITER ;
Итак, после запуска я получу это окно:
Вместо того, чтобы использовать цену лекарства, я должен использовать название лекарства, которое соответствует его цене в таблице.
Настольный рецепт:
Это означает, что, если я введу название лекарства, цена должна быть взята для расчета, но я не знаю, как это сделать.
Я полагаю, мне нужно объединить оператор выбора в операторе создания функции.
Кстати: английский не мой родной язык!!! Пожалуйста, прости меня за ошибки!
2 ответа
Вы можете использовать оператор SELECT...INTO и сделать что-то вроде этого:
SELECT your_price_column INTO price FROM your_table WHERE Name = mname
IF price < 0 THEN
SET prescription_costs = 0;
...
CREATE FUNCTION prescription_costs (mname varchar(100), dosage int, duration time) RETURNS INT
BEGIN
DECLARE prescription_costs INT;
DECLARE price decimal(8,2);
SELECT Price into price from medicine where Name=mname;
IF price < 0 THEN
SET prescription_costs = 0;
Как это..?
CREATE FUNCTION prescription_costs (mname varchar(100), dosage int, duration time) RETURNS INT
BEGIN
DECLARE prescription_costs INT;
DECLARE price1 DECIMAL(8,2);
SELECT Preis into price1 from medicine where Name = mname;
IF price1 < 0 THEN
SET prescription_costs = 0;
ELSEIF dosage < 0 THEN
SET prescription_costs = 0;
ELSEIF duration < '0' THEN
SET prescription_costs = 0;
ELSE
SET prescription_costs = price1*dosage*ceiling(dauer/24h);
END IF;
RETURN (prescription_costs);
END;
Приведенный выше код почти готов, но есть небольшая ошибка, которая делает расчет неверным. Функция потолка () могла быть источником ошибки. Какой у нас аргумент? потолок (дата / сутки)?
Это может быть, например,... потолок ('00:50: 00 '/'24:00:00'), но как это будет рассчитано? Однако я получаю ошибку 1292.
Код ошибки: 1292. Усеченное неправильное значение DOUBLE: '24:00:00'
Что я должен делать? Как я могу это исправить?
Пожалуйста, помогите мне?