Не разрешено возвращать результат? хранимая процедура mysql - PullRequest
0 голосов
/ 09 января 2020
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 голосов
/ 10 января 2020

Если вы хотите установить переменную в результате запроса 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...