Excel 2016 Power Query - 从 Oracle 数据字典中获取数据

Posted

技术标签:

【中文标题】Excel 2016 Power Query - 从 Oracle 数据字典中获取数据【英文标题】:Excel 2016 Power Query - Get data from Oracle data dictionary 【发布时间】:2018-09-26 14:29:01 【问题描述】:

我已经设置了一个带有 Oracle db 数据源的 Excel 2016 电子表格,并且我已经在 PowerQuery 中设置了几个查询,以从特定架构中的表中获取数据,并且一切正常。

我现在需要从数据字典中获取一些数据——我需要在架构中找到与特定表关联的触发器的名称——所以我设置了一个查询来尝试从 user_triggers 中获取数据,但是到目前为止,我还不能让它工作。

这是我到目前为止设置的查询(SourceTableName 是对工作表中命名单元格的引用以获取表名):

let
    STN = Excel.CurrentWorkbook()[Name="SourceTableName"][Content],
    #"Changed Type" = Table.TransformColumnTypes(STN,"Column1", type text),
    table_name = #"Changed Type"0[Column1],
    Source = Oracle.Database("MY_DB", [HierarchicalNavigation=true]),
    Schema = Source[Schema="MY_SCHEMA"][Data],
    USER_TRIGGERS = Schema[Name="USER_TRIGGERS"][Data]
in
    USER_TRIGGERS

只要表名是架构中的表之一,这对于我已经设置的其他查询非常有效,但是在上面的示例中引用数据字典视图似乎不起作用。

我在尝试运行此查询时遇到的错误是:

Expression.Error:键与表中的任何行都不匹配。 细节: 键=记录 表=表

有谁知道是否真的可以使用 powerquery 从数据字典中获取数据,以及是否需要进行更改才能使其正常工作?

提前感谢您对此的任何帮助!

干杯, 戴夫

【问题讨论】:

【参考方案1】:

我想通了!回答我自己的问题,以防将来对其他人有用

实际上可以直接在 db 连接行中指定 SQL 查询,您可以在 SQL 中包含来自查询其他部分的变量名,如下所示:

let
    STN = Excel.CurrentWorkbook()[Name="SourceTableName"][Content],
    #"Changed Type" = Table.TransformColumnTypes(STN,"Column1", type text),
    table_name = #"Changed Type"0[Column1],
    upper_tn = Text.Upper(table_name),
    Triggers = Oracle.Database("MY_DB", [HierarchicalNavigation=true, Query="select trigger_name from user_triggers where table_name = '" & upper_tn & "'"])
in
    Triggers

以这种方式直接使用 SQL 查询似乎适用于数据字典视图:)

【讨论】:

还添加以防有人发现它有用:发现当我的查询返回 >1M 行时遇到此错误。

以上是关于Excel 2016 Power Query - 从 Oracle 数据字典中获取数据的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的excel的Power Query没有按行分隔分选项

如何等待 Power Query 刷新完成?

从 Excel 数据模型/Power Query 查询单个数据点(获取和转换数据)

Excel Power Query - 睡眠或等待命令等待 API 速率限制

power query(获取与转换):excel数据整理的新利器

Power BI-Power Query实现九九乘法口诀