无法理解以下查询,有人解​​释一下吗?

Gan*_*Ben 0 sql oracle

select table_name, 
to_number(
  extractvalue(
    xmltype(
      dbms_xmlgen.getxml(
       'select count(*) c from '||table_name
    ))
  ,'/ROWSET/ROW/C')
) count
from user_tables
order by table_name;
Run Code Online (Sandbox Code Playgroud)

我知道它给出了每个表的行总数。但如何知道它是如何工作的呢?

Aco*_*gua 5

从最里面的部分开始检查查询是理解的最佳方法:

'select count(*) c from ' || table_name
Run Code Online (Sandbox Code Playgroud)

创建一个包含查询的字符串,该查询从 引用的表中选择记录数table_name,因此如果table_name包含xyz,则查询将为select count(*) from xyz

xmltype(dbms_xmlgen.getxml(<query>))
Run Code Online (Sandbox Code Playgroud)

执行动态生成的查询,生成 XML 结果。

to_number(extractvalue(<xml>, '/ROWSET/ROW/C'))
Run Code Online (Sandbox Code Playgroud)

按照特定路径从之前生成的 XML 中获取特定值。我们需要假设 XML 看起来像<ROWSET><ROW><C>value</C></ROW></ROWSET>. 提取的值(仍然是字符串)随后将转换为数字。

select table_name, <number> count from user_tables order by table_name
Run Code Online (Sandbox Code Playgroud)

最后剩下的就是……