如何查询Intersystems Caché的命名空间、数据库和表的列表?

4
我需要获取Caché中命名空间、数据库和表的列表,以便我可以循环每个并查询各种事情(例如行数)。 我看过this,但它只列出了%SYS命名空间中的数据库。 我知道我可以在终端中使用LIST^%NSP来获取命名空间列表,但它有额外的文本(“这里是定义的命名空间:”),我不想解析。 另外,如果可能的话,我真的想坚持使用SQL查询。 谢谢
2个回答

4
在终端中,您可以输入以下命令:
D ##class(%SYS.Namespace).ListAll(.result)
zw result

这将获取所有可用的命名空间。

2
要列出命名空间,您需要在%SYS.Namespace包中使用List查询。
要检索有关特定命名空间内容的数据,您需要位于该命名空间中。从COS开始,您可以使用ZNSPACE。然后,您可以查询链接的%Dictionary.ClassDefinition。与您的说法相反,这不仅查询%SYS类,而是所有来自当前命名空间的可用类,默认情况下,这将包括以%开头的所有类。
如果您想避免这些类,可以简单地调用
SELECT Name FROM %Dictionary.ClassDefinition WHERE NOT Name %STARTSWITH '%'

顺带一提,您可以在更新的版本中将上述列表查询作为存储过程进行调用: CALL %SYS.Namespace_List() 处理返回结果集应该相对容易,但这可能取决于您的客户端。您还需要考虑系统是否有任何包映射(多个命名空间中可用相同的定义/库)或全局映射(相同的数据可能在多个命名空间中可用)。这可能会影响您查看/处理结果的方式。 - DdP

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接