【问题标题】:Not allowed to return a result ? stored procedure mysql不允许返回结果?存储过程 mysql
【发布时间】:2020-01-09 20:36:05
【问题描述】:
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 ;

【问题讨论】:

  • 存储过程在哪里???仔细看,逐个字母:CREATE FUNCTION AccountType ...
  • 您可以尝试更好地表述问题并提供更多细节。例如,如何从存储过程返回结果?我的过程在这里详细说明,我想返回 <...>,但我收到错误 <...>

标签: mysql sql stored-procedures


【解决方案1】:

如果要将变量设置为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;

【讨论】:

  • 你的回答对我帮助很大:)
猜你喜欢
  • 1970-01-01
  • 2021-03-22
  • 2013-08-14
  • 2012-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-06
相关资源
最近更新 更多