不允许返回结果?存储过程mysql

时间:2020-01-09 20:36:05

标签: mysql sql stored-procedures

CREATE TABLE ZAMOWIENIA( id_zamowienia INT PRIMARY KEY NOT NULL,
    id_uzytkownika INT, kwota_zamowienia DECIMAL(10,2));

INSERT INTO
    ZAMOWIENIA VALUES (1,1,20), (2,4 ,5), (3,3,100), (4,1,300),
    (5,2,80), (6, 1,150);

SELECT * FROM ZAMOWIENIA;

select
    count(id_uzytkownika) from ZAMOWIENIA WHERE id_uzytkownika=1;

DROP
    FUNCTION AccountType;

DELIMITER //
CREATE FUNCTION AccountType(
    in_id_uzytkownika INT) RETURNS VARCHAR(20) DETERMINISTIC 
BEGIN
    DECLARE account_type VARCHAR(20); 
    DECLARE in_id_uzytkownika INT;
    DECLARE zamowienia INT;

    select count(id_uzytkownika)  AS zamowienia 
    from ZAMOWIENIA 
    WHERE id_uzytkownika=in_id_uzytkownika; 

    select zamowienia from zamowienia;

    IF zamowienia >10 THEN      
        SET account_type = 'BRONZE';
    END IF;      
    IF zamowienia >30 THEN      
        SET account_type = 'SILVER';
    END IF;     
    IF zamowienia >60 THEN      
        SET account_type = 'GOLD';
    END IF;

    return account_type; 
END // DELIMITER ;

1 个答案:

答案 0 :(得分:0)

如果要将变量设置为SELECT查询的结果,则需要使用SELECT ... INTO variable,而不是SELECT ... AS variable。您的函数正在尝试返回SELECT查询的结果,因为它没有将结果存储到变量中。

或者您可以使用SET语句,当您只设置一个变量时,这会更简单。

因此将两个SELECT语句替换为:

SET zamowienia = (SELECT COUNT(*) FROM from ZAMOWIENIA 
    WHERE id_uzytkownika=in_id_uzytkownika); 

此外,您不应在函数参数中使用DECLARE条语句。删除行

DECLARE in_id_uzytkownika INT;
相关问题