我已经建立了一个使用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从数据字典中获取数据,并且是否需要更改才能使其正常工作?
在此先感谢您的帮助!
干杯, 戴夫
答案 0 :(得分:0)
我知道了!回答我自己的问题,以防将来对其他人有用
实际上可以直接在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查询对于数据字典视图来说似乎很好用:)