我需要知道一种方法,在执行查询之前,从Java桌面应用程序中检查Oracle视图是否存在于当前数据库中,否则我将会遇到很多麻烦...提前感谢。
SELECT COUNT(*)
FROM all_views
WHERE view_name = <<the name of the view>>
AND owner = <<the owner of the view>>
Connection
创建一个DatabaseMetaData
对象,并调用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
该网址提供了关于it技术方面的详细文档。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;
}
这个可以运行!:)
只需查询它。如果不存在,或者您的会话没有必要的权限,Oracle将引发适当的异常。
你可以使用user_views查看你拥有的所有视图,或者使用ALL_VIEWS查看你有权限访问的所有视图。我会选择使用all_views。
SELECT COUNT(*)
FROM ALL_VIEWS
WHERE VIEW_NAME = '[YOUR VIEW NAME']
ALL_VIEWS
时,你应该在视图的所有者上添加一个条件。否则,你可能会得到一个“正面”的结果,但仍然无法访问视图而需要限定所有者。 - user330315WHERE VIEW_NAME = '在此处输入你的视图名称'
。不需要括号。 - vanchagreen