1

我需要你的帮助。我应该创建一个函数来计算处方的处方成本。公式应该是这样的:

药价 x 剂量 x 上限(duartion/24h)

函数的签名是:

处方费用(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 ;

所以,运行后我会得到这个窗口:

名字

而不是使用药物的价格,我必须使用药物的名称,它指的是表中的价格。

表方为:

处方

也就是说,如果我输入药物的名称,应该以价格计算,但我不知道如何计算。

我想我必须在 create function 语句中结合 select 语句。

BTW:英语不是我的母语!!!请原谅我的错误!

4

3 回答 3

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;

像这样..?

于 2016-01-12T23:15:20.210 回答
0

您可以使用SELECT...INTO语句并执行以下操作:

SELECT your_price_column INTO price FROM your_table WHERE Name = mname
IF price < 0 THEN 
    SET prescription_costs = 0;
...
于 2016-01-12T22:40:37.480 回答
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;

上面的代码差不多完成了,但是有一个小错误导致计算错误。天花板()函数可能是错误的来源。我们有什么论据?天花板(日期/24 小时)?

这可能是例如 ...ceiling('00:50:00'/'24:00:00') 但这将如何计算?但是,我收到错误 1292。

错误代码:1292。截断不正确的 DOUBLE 值:'24:00:00'

我应该怎么办?我该如何纠正?

请帮我?

于 2016-01-15T17:35:57.903 回答