我对 ERP 应用程序进行编程、管理和支持。我更常见的任务之一是了解数据的来源,找到应用程序中特定报表字段与其数据输入字段之间的链接。为此,我必须手动检查一个或多个视图的 DDL SQL 以了解表列,以便将一个视图的表列与另一个视图的表列相匹配。此手动任务可能需要检查四个或五个抽象层。
是否有更快的方法来检查元数据以查找视图列是如何根据其基表列计算的?有没有办法检查 Oracle 的执行计划以查看重写的查询,跳过中间视图的手动检查?
我对 ERP 应用程序进行编程、管理和支持。我更常见的任务之一是了解数据的来源,找到应用程序中特定报表字段与其数据输入字段之间的链接。为此,我必须手动检查一个或多个视图的 DDL SQL 以了解表列,以便将一个视图的表列与另一个视图的表列相匹配。此手动任务可能需要检查四个或五个抽象层。
是否有更快的方法来检查元数据以查找视图列是如何根据其基表列计算的?有没有办法检查 Oracle 的执行计划以查看重写的查询,跳过中间视图的手动检查?
从 12c 开始,我们有DBMS_UTILITY.EXPAND_SQL_TEXT。
您基本上通过第一个输入参数传递查询文本,并通过第二个输出参数接收重写的查询。
但是因为你在 11.2,你还不能使用它。但是,您可以收集优化器跟踪。如果您已经运行了查询,并且有它的 sql_id:
或者如果您不知道 sql_id 并且之前没有运行查询:
这些将生成一个跟踪文件,您可以阅读该文件并在其中找到最终的、重写的查询。
老实说,一旦你有一些复杂的查询,所有方法产生的输出都很难阅读,而且获取它们的方法也不是那么简单,所以我通常最终手动阅读和“解析”DDL 语句......
您有权访问执行计划吗?这将显示 Oracle 如何将视图列解析为基本索引或表。您可以创建简单的虚拟查询来关注您感兴趣的特定项目。
三年后,11g 实例的安装基础可能会像我们一样转移到 12c。
OUT
参数不像函数那样方便,但WITH
12c 中的子句现在接受用户定义的 PL/SQL 函数。