クエリを実行する前に現在の DB に Oracle のビューが存在するかどうかを Java Desktop App から確認する方法を知る必要があります。そうしないと、多くの問題が発生します...
前もって感謝します
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
ビューが存在するかどうか、および現在のユーザーに対してビューが有効かどうかだけでなく、ビューが有効または無効であるかどうかを確認したい場合は、all_objects テーブルからの選択を使用できます
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']
If it's a one-time check I'd say it's fine, but if you perform a query on that view repeatedly I'd say it's a bad idea to check again and again.
クエリするだけです。存在しない場合、またはセッションに必要な権限がない場合、Oracle は適切な例外を発生させます。