如果变量不同,Oracle是否将sql语句缓存为相同?

时间:2013-06-07 20:05:50

标签: sql oracle caching binding parameters

我想知道我是否编写了代码,因此它产生了两个相同的sql语句,但变量名称在不同的位置会被缓存为同一个语句吗?

例如,如果我有:

Select * from example where id in (:inarg0, inarg1);
Select * from example where id in(:inarg2, inarg3);

更新 我创建了一个函数,它将获取一个数据数组并将其转换为绑定变量,每次调用该函数时该变量都会递增。这很棒,有sql注入。我只是希望通过缓存语句来获得一些性能。位置绑定变量不是一个选项,因为该函数与其他可绑定变量(如

)混合在一起

Select * from example where name = :name and expt = (:inarg0, inarg1) and date=:todaysDate and loc in (:inarg2, :inarg3, :inarg4)

如果该函数要在同一程序中再次运行,那么它看起来像这样:

Select * from example where name = :name and expt = (:inarg5, inarg6) and date=:todaysDate and loc in (:inarg7, :inarg8, :inarg9)

1 个答案:

答案 0 :(得分:0)

它将被视为不同的查询 - 解析的查询将不会被重用。要测试它,请执行两个查询并验证v $ sql中的相应行。你正在做类似于cursor_sharing = force参数值的事情 - 除了Oracle用变量名做得更好 - 以使它们更容易重用SQL。