Oracle 中,获取指定用户所有有权限访问的表的基本信息、分页实现

查询由指定用户创建的表

SELECT * FROM ALL_OBJECTS WHERE OWNER='用户名' AND OBJECT_TYPE='TABLE'

或者

SELECT * FROM USER_TABLES

但是上面这两种方式获取的 全部是由这个用户创建的表。

但是,试想一下下面这种情况:

  • 用户A 有一张表 tableA
  • 用户B 有一张表 tableB
  • 用户A将tableA的权限开放给了 用户B

    该如何查到 用户B 所有有权限访问的表呢?即 tableA 和 tableB。
    答案是:

SELECT * FROM ALL_TABLES ;

最后,给出Oracle中,查询 表的基本信息(表名、表的注、表的创建时间、表的修改时间等) 对应的SQL。

String sql = "SELECT " +
             "  * " +
             "FROM " +
             "  (" +
             "    SELECT " +
             "      AT.OWNER OWNER, AT.TABLE_NAME TABLE_NAME, UTC.COMMENTS COMMENTS, AO.CREATED CREATED, AO.LAST_DDL_TIME LAST_DDL_TIME, ROWNUM RN" +
             "    FROM" +
             "      ALL_TABLES AT" +

             "      LEFT JOIN" +
             "      ALL_OBJECTS AO" +
             "      ON" +
             "        AT.OWNER=AO.OWNER" +
             "        AND" +
             "        AT.TABLE_NAME=AO.OBJECT_NAME" +

             "      LEFT JOIN" +
             "      USER_TAB_COMMENTS UTC" +
             "      ON" +
             "        AO.OBJECT_NAME=UTC.TABLE_NAME" +

             "    WHERE" +
             "      ROWNUM" +
             "  ) " +
             "WHERE" +
             "  RN>=?";

你可能感兴趣的:(oracle,db)