我被告知运行此代码以查看显示的对象列表
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