我正在尝试查看每个用户显示的对象列表,但 none 是可见的 SQL*Plus

I am trying to view a list of objects displayed per user but none are visible SQL*Plus

我被告知运行此代码可以查看显示的对象列表

SELECT OWNER,OBJECT_NAME,OBJECT_TYPE FROM USER_OBJECTS WHERE OWNER = ‘sam';

当我 运行 它时,我得到这个错误

ORA-00904: "OWNER": invalid identifier

但是,我能够运行这个并且它有效

SELECT OBJECT_NAME,OBJECT_TYPE FROM USER_OBJECTS WHERE OBJECT_NAME NOT LIKE ‘BIN%’;

我的目的是查看每个角色分配的对象列表。我正在使用 Oracles SQL Plus 18G

谢谢

尝试使用正确的引号,但总的来说 table 名称是 ALL_OBJECTS

USER_OBJECTS 是实际用户的视图,没有所有者列

    SELECT OWNER,OBJECT_NAME,OBJECT_TYPE 
    FROM ALL_OBJECTS 
    WHERE OWNER = 'sam'

https://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements003.htm https://docs.oracle.com/cd/B19306_01/server.102/b14237/statviews_4378.htm#i1634422

首先,清除回收站以避免 BIN% 个对象(已删除的对象)。

SQL> purge recyclebin;

Recyclebin purged.

现在,查询:如果您从 user_objects select,那里没有 OWNER 列。在 all_objects 中,然后限制结果是有意义的,因为在我的 XE 数据库中这样的查询 returns ~7.300 个对象:

    SQL> select owner, object_name, object_type
      2  from all_objects
      3  order by owner, object_name;

    OWNER      OBJECT_NAME          OBJECT_TYPE
    ---------- -------------------- --------------------
    PUBLIC     DUAL                 SYNONYM
    PUBLIC     MAP_OBJECT           SYNONYM
    PUBLIC     SYSTEM_PRIVILEGE_MAP SYNONYM
    PUBLIC     TABLE_PRIVILEGE_MAP  SYNONYM
    SYS        DUAL                 TABLE
    SYS        ORA$BASE             EDITION
    SYS        SYSTEM_PRIVILEGE_MAP TABLE
    SYS        TAB$                 TABLE
    SYS        TABLE_PRIVILEGE_MAP  TABLE
    <snip>
    XDB        XMLINDEX             INDEXTYPE
    XDB        XMLINDEXINSFUNC      FUNCTION
    XDB        XMLINDEXLOADFUNC     FUNCTION
    XDB        XMLINDEX_NOOP        OPERATOR

    7323 rows selected.

默认情况下,除非您在创建 users/objects 时使用双引号,否则 Oracle "stores" 所有内容均大写。因此,'sam' 不存在于您的数据库中,但 'SAM' 存在。所以:

SQL> select owner, object_name, object_type
  2  from all_objects
  3  where owner = 'SAM'                --> uppercase in single quotes
  4  order by owner, object_name;

no rows selected

SQL>

我没有用户 SAM,所以没有返回任何内容,但应该在您的数据库中。如果没有,答案很简单:用户 SAM 没有任何对象。