我正在尝试查看每个用户显示的对象列表,但没有一个是可见的 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

谢谢

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

SQL> purge recyclebin;
Recyclebin purged.

现在,查询:如果从user_objects中选择,则那里没有OWNER列。在all_objects中,然后限制结果是有意义的,因为在我的 XE 数据库中,这样的查询返回 ~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.

默认情况下,除非您在创建用户/对象时使用双引号,否则 Oracle 会以大写形式"存储"所有内容。因此,数据库中不存在'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没有任何对象。

尝试使用正确的引号,但总的来说表名是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

相关内容

最新更新