我想知道我是否编写了代码,因此它产生了两个相同的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)
答案 0 :(得分:0)
它将被视为不同的查询 - 解析的查询将不会被重用。要测试它,请执行两个查询并验证v $ sql中的相应行。你正在做类似于cursor_sharing = force参数值的事情 - 除了Oracle用变量名做得更好 - 以使它们更容易重用SQL。