You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MariaDB存储过程中结合参数使用通配符

问题:MariaDB存储过程中LIKE前缀匹配失效

我有一个用于统计查询结果的存储过程,包含2个输入参数:一个需精确匹配,另一个只需匹配以指定值开头的内容。存储过程代码如下:

CREATE OR REPLACE PROCEDURE CandidateCount(IN param_pack VARCHAR(64), IN param_value VARCHAR(64), OUT result INTEGER)
BEGIN
    SELECT COUNT(*) INTO result " + conditions + " LIMIT 1; 
END

Java中拼接查询条件的代码如下,其中精确匹配逻辑正常,但两个LIKE前缀匹配的语句无法生效:

String conditions = " FROM Product WHERE ";
conditions += "PackageName = RTRIM(param_pack)";    // 正常工作

conditions += " AND (";

conditions += "ProductNumber = RTRIM(param_value)";     // 正常工作
conditions += " OR ";
conditions += "ProductNumber LIKE RTRIM(param_value) + '%'";    // 不生效
conditions += " OR ";
conditions += "ProductName LIKE RTRIM(param_value) + '%'";      // 不生效

conditions += ")";

我使用JDBC连接MariaDB 10.3数据库,尝试过相关方案但无语法警告却无法生效。


解决方案

核心问题:字符串拼接语法错误

MariaDB(属于MySQL生态)不支持用+做字符串拼接,这是SQL Server专属语法。需要改用MariaDB原生的CONCAT()函数来拼接前缀值和通配符%。

修改后的条件拼接代码

String conditions = " FROM Product WHERE ";
conditions += "PackageName = RTRIM(param_pack)";    

conditions += " AND (";

conditions += "ProductNumber = RTRIM(param_value)";     
conditions += " OR ";
conditions += "ProductNumber LIKE CONCAT(RTRIM(param_value), '%')";    // 修正拼接语法
conditions += " OR ";
conditions += "ProductName LIKE CONCAT(RTRIM(param_value), '%')";      // 修正拼接语法

conditions += ")";

更优方案:直接在存储过程中编写完整SQL(避免Java拼接,更安全)

把查询逻辑直接写到存储过程里,既规避Java字符串拼接的语法问题,还能降低SQL注入风险:

CREATE OR REPLACE PROCEDURE CandidateCount(IN param_pack VARCHAR(64), IN param_value VARCHAR(64), OUT result INTEGER)
BEGIN
    SELECT COUNT(*) INTO result 
    FROM Product 
    WHERE PackageName = RTRIM(param_pack)
      AND (
          ProductNumber = RTRIM(param_value)
          OR ProductNumber LIKE CONCAT(RTRIM(param_value), '%')
          OR ProductName LIKE CONCAT(RTRIM(param_value), '%')
      )
    LIMIT 1; 
END

内容的提问来源于stack exchange,提问作者Guido Wolff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 11:42:05