如何在参数化查询中转义单引号

时间:2016-04-14 12:10:19

标签: mysql sql pentaho pentaho-cde

我有问题。我使用IN子句在查询中传递参数,但是它给了我错误,因为它不是将它视为两个不同的值而是将它视为单个值,所以我如何在sql级别处理它?<​​/ p>

  

从表中选择*,其中名称为('abc','xyz');这样可以正常工作。

而不是将其视为

  

从表中选择*,其中名称为('abc,xyz');这会给出错误

我的参数值如下 基本上我正在检查条件过滤。为什么写这个逻辑,如果有值,那么在where子句中考虑这个参数,否则忽略它。

  

'$ {thera}'&lt;&gt;的情况'''' 然后       (ccp.name in('$ {thera}'))ELSE 1 = 1 END

注意:为避免条件过滤,任何更好的方法是他们的,请建议到。

1 个答案:

答案 0 :(得分:0)

您确实可以将值列表作为参数传递。但您需要使用自定义参数组件。

对于您的示例,您可以创建名为parThera的自定义参数,然后对于初始值,您可以像在javascript中一样使用表达式:

['abc','xyz']

另一种选择是使用函数表达式,如:

function (){
  return "A list of words".split(" ");
}

然后,在SQL查询中,添加此参数,使用thera作为参数名称,并将参数parThera作为值。

现在您可以像在第一个示例中一样在SQL中使用它:

SELECT * FROM TABLE WHERE name IN (${thera})

该参数将扩展为'abc','xyz',从而使其可在IN (...)子句中使用。

  

注意:在SQL参数设置中,您需要指定此参数的类型为 StringArray 。否则它将无法正确扩展。