我有一个非常简单的查询,它需要一个字符串数组参数。当参数有值时没有问题,但是当参数为空时我需要返回所有值。
select distinct departamento_nom
from dim_publicas.dt_cliente dc
where departamento_nom in (${dpto})
字符串
我已经尝试过coalesce
参数,但是当不为null时,它只接受字符串数组的第一个值
select distinct departamento_nom
from dim_publicas.dt_cliente dc
where departamento_nom in (coalesce (${dpto},departamento_nom))
型
的数据
1条答案
按热度按时间rsaldnfx1#
当遇到
${dpto}
时,客户端应用程序似乎正在执行字符串替换,并将结果文本作为查询提交。这是一种危险的做法,因为它会使查询容易受到SQL注入攻击。较好的做法是使用绑定参数。以下查询保留了具有风险的字符串替换方法。如果
${dpto}
的计算结果为空字符串,则它将返回所有不同的行。如果${dpto}
的计算结果为逗号分隔的带引号值列表,则查询将返回与列表中的任何值匹配的所有非重复行。字符串
该查询的工作原理是将
${dpto}
转换为字符串数组,该数组将作为单行表t
中的列dpto
返回。这一行与dim_publicas.dt_cliente
的每一行联接。