簡體   English   中英

不允許返回結果? mysql 存儲過程

[英]Not allowed to return a result ? stored procedure mysql

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 ;

如果要將變量設置為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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM