SQL Developer SQL Tuning Advisor 并非所有变量都绑定
Posted
技术标签:
【中文标题】SQL Developer SQL Tuning Advisor 并非所有变量都绑定【英文标题】:SQL Developer SQL Tuning Advisor not all variables bound 【发布时间】:2017-09-18 16:46:55 【问题描述】:我正在尝试将 SQL 调优顾问与 SQL Developer(版本 4.1.3.20 和 17.2.0.188)一起使用。使用多个绑定变量实例的查询,例如:
select * from dual where :one = :one;
导致 SQL Tuning Advisor 出错:
-------------------------------------------------------------------------------
ERRORS SECTION
-------------------------------------------------------------------------------
- ORA-01008: not all variables bound
-------------------------------------------------------------------------------
对于具有一个或多个绑定变量的多个实例的查询,是否有解决方法或其他方法来获取相同的 SQL 调整信息?
【问题讨论】:
即使你在命名,你也不能重用绑定,它们总是基于位置的。你需要按顺序绑定两次。 @Ben 这不是 SQL Developer 的问题吗?我这里不是写SQL开发者,我是用的。 我认为你发现了一个错误,如果我有 2 个不同名称的绑定,则顾问运行没有问题 【参考方案1】:基本上,Tuning Advisor 按位置(而不是名称)绑定。所以解决方法是重命名所有重复的变量实例。添加编号后缀就足够了。在您的示例中,您必须将变量命名为 :one 和 :one_1。
select * from dual where :one = :one_1;
我知道,这并不理想,但应该可以。
【讨论】:
【参考方案2】:不确定为什么要使用“:one = :one”,可以将其替换为“1 = 1”,或者再添加一个由相同值分配的变量,select * from dual where :one = :two ;
【讨论】:
以上是关于SQL Developer SQL Tuning Advisor 并非所有变量都绑定的主要内容,如果未能解决你的问题,请参考以下文章
如何用 SQL Tuning Advisor (STA) 优化SQL语句
11g新特性-自动sql调优(Automatic SQL Tuning)