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 ;

Итак, после запуска я получу это окно:

mname

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

Настольный рецепт:

рецепт

Это означает, что, если я введу название лекарства, цена должна быть взята для расчета, но я не знаю, как это сделать.

Я полагаю, мне нужно объединить оператор выбора в операторе создания функции.

Кстати: английский не мой родной язык!!! Пожалуйста, прости меня за ошибки!

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'

Что я должен делать? Как я могу это исправить?

Пожалуйста, помогите мне?

Другие вопросы по тегам