在执行查询之前,我需要知道一种从 Java 桌面应用程序中检查的方法,如果 Oracle 的视图存在于当前数据库中,否则我会遇到很多麻烦......
提前致谢
您可以随时查询 Oracle 数据字典。就像是
SELECT COUNT(*)
FROM all_views
WHERE view_name = <<the name of the view>>
AND owner = <<the owner of the view>>
将告诉您是否有权访问具有指定名称的指定用户拥有的视图。
或者,您可以使用更加以 Java 为中心的方法。您可以从您的和调用创建一个DatabaseMetaData
对象,以获取您有权访问的所有表和视图的列表。您可以传递特定的表或视图名称(或模式)来限制结果。Connection
getTables
getTables
SELECT count(*)
FROM user_views
WHERE view_name = 'MY_VIEW'
手册中的更多详细信息:
http://docs.oracle.com/cd/E11882_01/server.112/e25513/statviews_5499.htm#i1635848
如果您不仅想查看视图是否存在以及是否为当前用户启用了视图,而且如果查看 VALID 或 INVALID,您可以使用 select from all_objects table
SELECT count(*)
FROM all_objects t
WHERE
t.object_type = 'VIEW'
and t.object_name = 'VIEW_NAME'
and t.status = 'VALID'
感谢大家,终于找到了解决这个问题的方法,感谢大家的建议,代码如下:
public boolean existViewInDB(String viewName) {
logger.debug("[boolean existViewInDB(String viewName[" + viewName
+ "])]");
boolean existView = false;
try {
String sql =
"SELECT count(*) FROM user_views WHERE view_name = :viewName";
SQLQuery query = getSession().createSQLQuery(sql);
query.setString("viewName", viewName);
BigDecimal totalOfViews = (BigDecimal) query.uniqueResult();
existView = (totalOfViews.longValue() > 0);
} catch (Exception e) {
logger.error(e, e);
}
logger.debug("Exist View [" + viewName + "] ? -> " + existView);
return existView;
}
这行得通!:)
如果是一次性检查,我会说没问题,但如果您反复对该视图执行查询,我会说一次又一次检查是个坏主意。
您可以将 user_views 用于您拥有的所有视图,或者将 ALL_VIEWS 用于您有权访问的所有视图。我会使用 all_views
SELECT COUNT(*)
FROM ALL_VIEWS
WHERE VIEW_NAME = '[YOUR VIEW NAME']
随便查询一下。如果它不存在,或者您的会话没有必要的权限,Oracle 将引发一个合适的异常。