我需要重写OBIEE的一些查询
我需要更改绑定变量中的所有文字值,但我还没有找到如何使用绑定变量
有人可以帮助我吗?
由于
答案 0 :(得分:1)
首先,声明:
如果您正在使用带有OBIEE的ADF(Oracle应用程序开发框架),ADF层中有一个设置,允许我们指定如何处理在VO上触发的查询中使用的View Criteria和WHERE子句。
默认情况下,adf-config.xml中的设置useBindVarsForViewCriteriaLiterals
设置为"False"
。如果此设置为False,则ADF将为视图条件生成带有文字的SQL,这可能会导致数据库的共享池区域发生争用。
如果我们将adf-config.xml中的设置更改为"True"
,则ADF会为所有视图标准生成带有绑定变量的SQL。
但是,不应为BI(OBIEE)更改此设置,因为BI不支持查询中的绑定变量。如果我们在OBIEE查询/报告中看到任何使用Bind变量的查询(或其相关日志),则可能是由于上述设置。
对于BI,此设置应保留为默认值,即"False"
快速回答:看来OBIEE无法使用绑定变量代替文字。
现在,限制绑定变量背后的原因是:
在数据仓库中,而不是运行1000条语句 每秒,他们做一些事情,比如平均花费100秒来运行单个查询。 在这些系统中,查询很少但很大(他们提出大问题)。在这里, 解析时间的开销只是整个执行时间的一小部分。即使你 有成千上万的用户,他们并没有等待对方解析查询,但是 而是等待查询完成答案。
在这些系统中,使用绑定变量可能会适得其反。在这里,运行时间为 查询很长 - 以秒,分钟,小时或更长时间。目标是获得最好的 查询优化计划可以减少运行时间,而不是执行尽可能多的OLTP, 尽可能查询十分之一秒。由于优化器的目标不同,因此规则 变化
有时使用绑定变量会强制优化器提出最佳通用计划,这实际上可能是特定查询的最差计划。在查询需要相当长时间执行的系统中,绑定变量会删除优化程序可能用于提出高级计划的信息。事实上,使用绑定变量会破坏某些特定于数据仓库的功能。例如,Oracle支持数据仓库的星形转换功能,可以大大减少查询所需的时间。但是,阻止星形转换的一个限制是包含绑定变量的查询。