Oracle:如何参数化列表?

时间:2010-02-17 17:37:25

标签: asp.net sql oracle parameters

我有一个带有where子句的查询,如下所示:

WHERE field IN ( 1, 2, 3 )

可以对此进行参数化,使其看起来像:

(:list)中的WHERE字段?

如何创建:list参数,假设它是一个整数列表,可以是1到10个整数?

ASP.net,webforms如果有所作为。

4 个答案:

答案 0 :(得分:2)

有两种方法可以容纳Dynamic IN列表:

  1. 将逗号分隔列表转换为派生表(AKA内联视图)
  2. 使用动态SQL
  3. 非动态


    大多数人更喜欢非动态SQL方法 - this link provides various ways to do it。使用它的最大原因是:

    WHERE :list LIKE '%,' || t.column || ',%'
    

    ......就是上面的内容:

    1. 将永远无法使用索引
    2. 无法匹配列表中的第一个或最后一个参数,因为两端都需要逗号才能匹配
    3. 简单的事实是,它不会按预期工作。 Oracle 10g +支持的正则表达式允许对列进行条件检查,但仍然面临着将索引呈现为没有问题的问题

      动态SQL


      提及“动态SQL”,您可能会hounded about SQL injection attacks。使用绑定变量可以缓解这种担忧。

      也就是说,动态SQL需要对查询进行最少的更改。

答案 1 :(得分:0)

与SQL Server相同的答案,已在此处询问:Parameterize an SQL IN clause

答案 2 :(得分:0)

据我所知,你不能。你将在同一个地方混合价值观和经营者。

但是,在ASP.NET中自动创建一个参数数组并动态获取它应该相当简单:

WHERE field IN (:list1, :list2, :list3, :list4)

答案 3 :(得分:0)

这个问题'如何绑定列表'似乎出现了很多。

在Oracle中执行此操作最简单的“技巧”是使用我在此处发布的答案:

Dynamic query with HibernateCritera API & Oracle - performance

我不能说这是我的伎俩,因为它来自Tom Kyte的博客,他是一位Oracle大师!