6

クエリを実行する前に現在の DB に Oracle のビューが存在するかどうかを Java Desktop App から確認する方法を知る必要があります。そうしないと、多くの問題が発生します...

前もって感謝します

4

7 に答える 7

6

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特定のテーブルまたはビュー名(またはパターン)を渡して、結果を制限することができます。

于 2012-04-13T20:02:17.877 に答える
5
SELECT count(*)
FROM user_views
WHERE view_name = 'MY_VIEW'

マニュアルの詳細:

http://docs.oracle.com/cd/E11882_01/server.112/e25513/statviews_5499.htm#i1635848

于 2012-04-13T19:56:32.480 に答える
1

ビューが存在するかどうか、および現在のユーザーに対してビューが有効かどうかだけでなく、ビューが有効または無効であるかどうかを確認したい場合は、all_objects テーブルからの選択を使用できます

SELECT count(*)
FROM all_objects t
WHERE 
t.object_type = 'VIEW' 
and t.object_name = 'VIEW_NAME'
and t.status = 'VALID'
于 2012-04-14T06:57:29.570 に答える
1

みんなのおかげで、最終的にこの問題を解決する方法を手に入れました。提案に感謝します。コードは次のとおりです。

    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;
}

これはうまくいきます!:)

于 2012-04-16T13:06:13.350 に答える
0

自分が所有するすべてのビューにuser_viewsを使用するか、アクセスできるすべてのビューにALL_VIEWSを使用できます。all_viewsを使用します

SELECT COUNT(*)
FROM ALL_VIEWS
WHERE VIEW_NAME = '[YOUR VIEW NAME']
于 2012-04-13T20:01:00.857 に答える
0

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.

于 2012-04-13T19:58:41.323 に答える
0

クエリするだけです。存在しない場合、またはセッションに必要な権限がない場合、Oracle は適切な例外を発生させます。

于 2012-04-16T06:17:46.507 に答える