OBIEE 和绑定变量

Posted

技术标签:

【中文标题】OBIEE 和绑定变量【英文标题】:OBIEE and Bind Variables 【发布时间】:2014-06-16 10:00:01 【问题描述】:

我需要重写 OBIEE 的一些查询

我需要更改绑定变量中的所有文字值,但我没有找到如何使用绑定变量

有人可以帮助我吗?

谢谢

【问题讨论】:

您是否尝试启用绑定变量以在 OBIEE 生成到 Oracle DB 的查询中使用? 是的,如果这是正确的工作方式。现在我不太了解 OBIEE 功能,我是 dba oracle,我需要更改 OBIEE 中的一些函数以使用绑定变量而不是文字 【参考方案1】:

首先声明:

如果您将 ADF(Oracle 应用程序开发框架)与 OBIEE 结合使用,则 ADF 层中有一个设置允许我们指定应如何处理在 VO 上触发的查询中使用的 View Criteria 和 WHERE 子句。

默认情况下,useBindVarsForViewCriteriaLiterals 在 adf-config.xml 中设置为 "False"。如果此设置为 False,则 ADF 将为视图标准生成带有文字的 SQL,这可能会导致数据库的共享池区域发生争用。 如果我们将 adf-config.xml 中的设置更改为"True",ADF 会为所有视图条件生成带有绑定变量的 SQL。

但是,不应为 BI (OBIEE) 更改此设置,因为 BI 不支持在查询中绑定变量。如果我们在 OBIEE 查询/报告中看到任何使用 Bind 变量的查询(或其相关日志),则可能是由于上述设置。

对于 BI,此设置应保留为默认值,即"False"

快速回答: OBIEE 似乎无法使用绑定变量代替文字。

现在,限制绑定变量的原因:

在数据仓库中,而不是运行 1000 条语句 每秒,他们会执行类似平均需要 100 秒来运行单个查询的操作。 在这些系统中,查询很少但很大(它们会问很大的问题)。在这里, 解析时间的开销只是整个执行时间的一小部分。即使你 有成千上万的用户,他们不是互相等待解析查询,而是 而是等待查询完成得到答案。

在这些系统中,使用绑定变量可能会适得其反。在这里,运行时 查询很长,以秒、分钟、小时或更多为单位。目标是获得最好的 查询优化计划可能减少运行时间,而不是执行尽可能多的 OLTP, 尽可能做到十分之一秒的查询。由于优化器的目标不同,规则 改变。

有时使用绑定变量会迫使优化器提出最佳的通用计划,这实际上可能是特定查询的最差计划。在查询需要相当长的时间来执行的系统中,绑定变量会删除优化器本可以用来制定更优计划的信息。事实上,一些数据仓库特有的特性被使用绑定变量打败了。例如,Oracle 支持数据仓库的星型转换功能,可以大大减少查询时间。但是,排除星型转换的一个限制是查询包含绑定变量。

【讨论】:

以上是关于OBIEE 和绑定变量的主要内容,如果未能解决你的问题,请参考以下文章

如何利用AngularJS绑定两个控制器并变量赋值

JVM方法的动态与静态绑定机制

JVM方法的动态与静态绑定机制

OBIEE 存储库变量和会话变量之间的区别

“使用”和“重新绑定”变量之间的含义和区别是啥?

reactjs开发自制编程语言编译器:实现变量绑定和函数调用