在mysql中定义新函数时出错错误#1064

j8ag8udp  于 2022-11-28  发布在  Mysql
关注(0)|答案(1)|浏览(136)

我试图在mysql中定义以下函数,但它给了我一个错误

DELIMITER //
CREATE FUNCTION salario_maximo(dep INT) 
RETURNS FLOAT
BEGIN
    DECLARE msalario FLOAT;
    DECLARE dpto INT;
    SELECT COUNT(*) INTO dpto FROM departamentos WHERE DEPT_NO=dep;
    IF(SELECT COUNT(*) FROM departamentos WHERE DEPT_NO=dep>0)
    BEGIN
        IF(SELECT COUNT(*) FROM empleados WHERE DEPT_NO=dep>0)
        BEGIN
            SELECT max(salario) INTO msalario from empleados where dept_no=dep;
        END
        ELSE
        BEGIN
            SET msalario = 0;
        END
    END
    ELSE
    BEGIN
        SET msalario = -1;
    END
    RETURN msalario;
END; // 
DELIMITER ;

我的错误是:

1064 -算法在第8行中的“开始IF(SELECT COUNT(*)FROM WHERE DEPT_NO=dep 0〉0”的定义中存在歧义

我需要帮助!谢谢!

bfnvny8b

bfnvny8b1#

这里有几样东西。
首先,在if条件之后需要一个“THEN”。
其次,需要使用END IF语句关闭IF ELSE块。
此外,请在END陈述式后面加上分号。
试试这个:

DELIMITER //
CREATE FUNCTION salario_maximo(dep INT) 
RETURNS FLOAT
BEGIN
    DECLARE msalario FLOAT;
    DECLARE dpto INT;
    SELECT COUNT(*) INTO dpto FROM departamentos WHERE DEPT_NO=dep;
    IF(SELECT COUNT(*) FROM departamentos WHERE DEPT_NO=dep>0)
    THEN
        BEGIN
            IF(SELECT COUNT(*) FROM empleados WHERE DEPT_NO=dep>0)
            THEN
            BEGIN
                SELECT max(salario) INTO msalario from empleados where dept_no=dep;
            END;
            ELSE
            BEGIN
                SET msalario = 0;
            END;
            END IF;
        END;
    ELSE
    BEGIN
        SET msalario = -1;
    END;
    END IF;
    RETURN msalario;
END; // 
DELIMITER ;

相关问题