mysql - 我的mysql用户定义函数有什么错误?

标签 mysql stored-functions

mysql 8.0第6行语法错误,创建的函数如下

CREATE FUNCTION getStokMiktar(p_sto_id INT, p_dep_id INT)
RETURNS DOUBLE
BEGIN
DECLARE ret DOUBLE

SET ret = (SELECT SUM(CASE WHEN sth_depoid_cikis = p_dep_id THEN -sth_miktar
                           WHEN sth_depoid_giris = p_dep_id THEN sth_miktar
                            ELSE 0
                            END CASE)
            FROM stokhareketleri
            WHERE 
                (sth_depoid_cikis = p_dep_id OR sth_depoid_giris = p_dep_id)
                AND sth_stokid = p_sto_id)

RETURN ret
END

我的表格结构是:

CREATE TABLE `stokhareketleri` (
     `sth_id` BIGINT(20) NOT NULL AUTO_INCREMENT,
     `sth_stokid` INT(11) NOT NULL,
     `sth_giriscikis` TINYINT(4) NOT NULL,
     `sth_evraktipi` INT(11) NOT NULL,
     `sth_depoid_cikis` INT(11) NOT NULL,
     `sth_depoid_giris` INT(11) NOT NULL,
     `sth_miktar` DOUBLE NOT NULL,
     PRIMARY KEY (`sth_id`)
    )
    COLLATE='utf8_turkish_ci'
    ENGINE=InnoDB
    ;

第 6 行的错误是什么?提前致谢。

最佳答案

正如@Salmon提到的,试试这个

delimiter $$
CREATE FUNCTION getStokMiktar(p_sto_id INT, p_dep_id INT)
RETURNS DOUBLE
BEGIN
DECLARE ret DOUBLE;

SELECT 
SUM(CASE    WHEN sth_depoid_cikis = p_dep_id THEN - sth_miktar 
            WHEN sth_depoid_giris = p_dep_id THEN sth_miktar 
            ELSE 0 END) INTO ret
FROM stokhareketleri
WHERE p_dep_id IN (sth_depoid_cikis,sth_depoid_giris)
AND sth_stokid = p_sto_id;

RETURN ret;
END $$

关于mysql - 我的mysql用户定义函数有什么错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57344167/

相关文章:

php - 如何在 phpmyadmin 中显示旧版本的 sql 查询?

MySQL-存储过程-尝试使用输出参数时的怪异

java - #Resolved - 查询//存储函数调用中不存在位置参数

mysql - MySQL 8 和 MySQL 5.7 之间的区别

mysql - 使用 OR 在多列上通过左连接创建 View

mysql - 这些查询有什么区别?

mysql - 将表分成 2 有什么逻辑吗?

php - SQL 从数据库获取 Woocommerce 产品缩略图

mysql - 无法创建存储函数 - 语法错误?

postgresql - postgresql中带有临时表的存储函数