我被告知要运行这段代码来查看显示的对象列表。
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。
谢谢你
首先,清除recyclebin以避免 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.
默认情况下,除非你在创建userobjects时使用双引号,否则Oracle会用大写字母 "存储 "一切。所以,我的XE数据库中,这样的查询结果是有意义的,因为我的XE数据库中,这样的查询返回了大约7.300个对象:默认情况下,除非你在创建userobject时使用双引号,否则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.comcdB19306_01server.102b14200sql_elements003.htm。https:/docs.oracle.comcdB19306_01server.102b14237statviews_4378.htm#i1634422。