所有对象都有名称,所有对象都属于某个人。" 某个人"就是数据库用户,例如HR。用户拥有的对象就是它们的模式(schema)。对象的名称必须符合某些规则。
用户是能够连接到数据库的人,用户有用户名和口令。
模式是一个容器,包含用户拥有的对象。
创建用户时,也会创建他们的模式。模式是用户拥有的对象。最初是空的。用户若从未创建对象,模式一直是空的。
模式对象是有所有者的对象。特定类型对象的唯一标识符不是它的名称,而是前面加上它所属的模式名称。表hr.abc 是名为abc的表,归用户hr所有。
而另外一个w.abc,它是另外一个完全不同的表(也许结构和内容不同),它归w所有,驻留在该用户的模式里。
使用DML 命令不能修改SYS模式中的对象。
对象名称总是区分大小写的。下面示例两个表完全不同:
SQL> create table lower(c1 date);
表已创建。
SQL> create table "lawer"(col1 varchar2(2));
表已创建。
SQL> select table_name from dba_tables where lower(table_name)='lower';
TABLE_NAME
------------------------------
lower
LOWER
查询列出某个特定数据库中存在的对象类型,并计算有多少种:从视图DBA_OBJECTS 中检索对象。每个对象在数据库中都有一行。
SQL> select object_type,count(object_type) from dba_objects group by object_type order by object_type;
OBJECT_TYPE COUNT(OBJECT_TYPE)
------------------- ------------------
CLUSTER 10
CONSUMER GROUP 5
CONTEXT 2
DIRECTORY 3
EVALUATION CONTEXT 11
FUNCTION 229
INDEX 1105
INDEX PARTITION 99
INDEXTYPE 6
JAVA CLASS 15937
JAVA DATA 299
OBJECT_TYPE COUNT(OBJECT_TYPE)
------------------- ------------------
JAVA RESOURCE 766
JOB 6
JOB CLASS 2
LIBRARY 136
LOB 479
LOB PARTITION 1
OPERATOR 51
PACKAGE 574
PACKAGE BODY 547
PROCEDURE 69
PROGRAM 3
OBJECT_TYPE COUNT(OBJECT_TYPE)
------------------- ------------------
QUEUE 21
RESOURCE PLAN 3
RULE 4
RULE SET 13
SCHEDULE 1
SEQUENCE 115
SYNONYM 18746
TABLE 1051
TABLE PARTITION 90
TRIGGER 51
TYPE 1315
OBJECT_TYPE COUNT(OBJECT_TYPE)
------------------- ------------------
TYPE BODY 136
UNDEFINED 6
VIEW 3097
WINDOW 2
WINDOW GROUP 1
XML SCHEMA 24
已选择39行。
--确定HR模式中各种类型的对象有多少个?user_objects视图列出当前会话连接的模式(这里是hr)拥有的所有对象
select object_type,count(*) from user_objects group by object_type;
--确定hr有权访问的对象总数,ALL_objects 视图列出用户能够访问的所有对象
select object_type,count(*) from all_objects group by object_type;
--确定谁拥有HR能够看见的对象
select distinct owner from all_objects;
另外:USER_OBJECTS 它会显示你拥有的所有对象。
ALL_OBJECTS 显示你能够访问的所有对象(包括自己拥有的对象)