【发布时间】:2013-12-06 13:58:37
【问题描述】:
我试图避免在每次使用动态 SQL 时都计算 oracle 的平原。
使用REPLACE,然后使用EXECUTE IMMEDIATE 而不使用USING 会导致开销,因为每次使用时字符串都不同,Oracle 似乎总是在寻找新的平原。
但是阅读 EXECUTE IMMEDIATE 声明 a 发现以下内容:
是吗? USING 绑定是否强制 Oracle 重新计算每个动态字符串?如果有,如何避免?
a) querytoselect = REPLACE( querytoselect, 'pattern', 'var' );
EXECUTE IMMEDIATE querytoselect.
b) EXECUTE IMMEDIATE querytoselect USING var
谢谢。
【问题讨论】:
-
请展示您的示例代码和SQL语句。
-
a) 隐含在另一个平原上,是 b) 吗?
-
如果你使用的是绑定变量,并且执行的SQL语句是一样的,那么我认为oracle不会再做硬解析了。尝试测试并查看 V$sqlarea 视图以查看显示的内容。
-
oracle 文档网站上的文字提出了质疑。我将搜索 V$sqlarea,我有几年的 C++ 但 Oracle 的 0,5 \m/
-
这个thread on Tom Kyte's site有点长,但值得一读。