如何通过JDBC获取VIEW引用(基础表)?

3
当我创建视图时,数据库引擎会解析我的查询并以某种方式存储它。我能找出一个视图使用了哪些表吗?我知道不同的数据库可能有所不同,可能通过JDBC具有某种级别的抽象。
有些东西告诉我可以通过getTables(?)来实现:
Connection con = DriverManager.getConnection(DBURL, DBUSER, DBPASS);        
DatabaseMetaData md = con.getMetaData();
md.getTables(null, null, null, null);

如果不行,特别针对Oracle数据库是否有解决方案(例如在plsql开发者中的视图/引用)?
2个回答

4
根据我所知,目前没有JDBC特定的方法来检索这些信息:你需要深入研究你的数据库特定的系统表,并查看是否有相关信息可用。
本回答的其余部分描述了检索视图的方式,而并非回答这个问题。
例如:DatabaseMetaData#getTables() 使用类型 "VIEW"。
dmd.getTables(catalog, schema, "%", new String[] {"VIEW"});

3

Oracle:

Select * from dictionary 

返回许多系统表/函数,您可以访问其中包含有价值的结构信息。

在该列表中,您将看到

Select * from ALL_Views(其中包含视图的源SQL),可解析出表名。

尽管我认为有一个all_Dependencies或all_References视图,其中包含对表的必需引用,这些引用在单独的字段中,更容易解析,我现在正在寻找它...

Select * from All_dependencies WHERE Name = 'YOUR_VIEWNAME' and Referenced_Type='TABLE'将返回所有引用的表。

虽然我不确定这些功能如何与链接表配合使用。因此,如果您通过链接服务器引用外部表...那些功能可能无法正常工作。


找到了一些关于mssql 其他的技巧。 - lunicon
我以为你在寻找Oracle解决方案,因此卡在了Oracle系统表上。 - xQbert
1
如果您的视图引用了其他视图,则需要在ALL_DEPENDENCIES上进行分层查询以获取所有表。 - Jon Heller
啊,是的,我忘记了那个方面。你可以更进一步地说,如果视图引用了函数、过程,那么你也需要使用分层查询。 - xQbert

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