具有变量查询运算符的MySQL函数

辛格先生

我正在使用2个参数(_id和_operator)在mysql(8.0.18)中创建一个函数。哪里_id是需要处理的记录标识,_operator是要执行的操作。

这段代码工作正常。但是,它相当大且重复:

DELIMITER $$

DROP FUNCTION IF EXISTS `deleteSubscriber` $$

CREATE FUNCTION `deleteSubscriber`(_id INTEGER, _operator VARCHAR(2)) RETURNS CHAR
    BEGIN
        IF (_operator = '=' OR ISNULL(_operator) = TRUE) THEN
            DELETE FROM `subscribers` WHERE `id` = _id;
            DELETE FROM `subscriber_packages` WHERE `id` = _id;
            ...
        ELSEIF (_operator = '>=') THEN
            DELETE FROM `subscribers` WHERE `id` >= _id;
            DELETE FROM `subscriber_packages` WHERE `id` >= _id;
            ...
        ELSEIF (_operator = '<=') THEN
            DELETE FROM `subscribers` WHERE `id` <= _id;
            DELETE FROM `subscriber_packages` WHERE `id` <= _id;
            ...
        ELSEIF (_operator = '<>' OR _operator = '!=') THEN
            DELETE FROM `subscribers` WHERE `id` != _id;
            DELETE FROM `subscriber_packages` WHERE `id` != _id;
            ...
        END IF;

        RETURN NULL;
    END$$
DELIMITER ;

这是我正在尝试的代码。但是,出现错误:

DELIMITER $$

DROP FUNCTION IF EXISTS `deleteSubscriber` $$

CREATE FUNCTION `deleteSubscriber`(_id INTEGER, _operator VARCHAR(2)) RETURNS CHAR
    BEGIN
        DELETE FROM `subscribers` WHERE `id` _operator _id;
        DELETE FROM `subscriber_packages` WHERE `id` _operator _id;
        ...

        RETURN NULL;
    END$$
DELIMITER ;

有没有一种方法可以将查询运算符作为值传递给此函数,以便删除重复的代码..?

Jitendra yadav

用途Prepared Statement相同。

CREATE PROCEDURE `deleteSubscriberData`(IN `_id` INT, IN `_operator` VARCHAR(2)) 
BEGIN
    SET @s = CONCAT('DELETE FROM subscribers WHERE id ', _operator, ' ', _id);
    PREPARE stmt1 FROM @s;
    EXECUTE stmt1;
    DEALLOCATE PREPARE stmt1;
    
    SET @s = CONCAT('DELETE FROM subscriber_packages WHERE id ', _operator, ' ', _id);
    PREPARE stmt2 FROM @s;
    EXECUTE stmt2;
    DEALLOCATE PREPARE stmt2;
END

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

需要变量运算符PHP PDO构建MySQL查询

具有变量的DB2 LIKE运算符

具有变量参数的Powershell呼叫运算符(&)

具有多个变量的三元运算符

具有传播运算符的Typescript构造函数

Java是否具有“ IN”运算符或类似SQL的函数?

如何在R中编写具有多个分组变量的函数?我正在使用卷曲卷曲运算符

比 AND 运算符有效的查询

MiniKanren是否具有“ not”运算符?

+具有多个参数的运算符

MASM是否具有::运算符?

在Oracle中使用OR运算符执行具有多个子查询的外部查询

具有默认参数的函数的SFINAE-自由函数vs运算符()

具有参数化查询的jsonb存在运算符

具有关联的活动记录查询中的LIKE运算符

具有逻辑运算符的批处理文件reg查询(NOT)

如何在具有多个变量的模板文字中使用三元运算符

CS50:LIKE运算符,具有%扩展的变量替换

具有4个变量的PHP逻辑运算符

具有变量和数据结构的Python Identity运算符

使用||为变量分配值 Ruby中具有if条件的运算符

删除具有var和non var变量的运算符

:=运算符无法在mysql函数中使用用户定义的变量

将带有 ANY 运算符的 SQL 查询转换为 Sequelize findAll 函数的问题

将内置类型变量传递给仅具有一个类类型参数的“ +”运算符时,用于自动类型转换的构造函数

在具有JavaScript的函数中使用三元运算符

具有函数的JavaScript三元运算符示例

Javascript 是否具有用于代替二元运算符的函数?

具有函数运算符的C ++数组类,用于赋值