创建同义词语法
CREATE [OR REPLACE] [PUBLIC] SYNONYM [schema.] 同义词名称 FOR [schema.] object [@dblink];
用户具备select any table权限即可创建(比如授予用户dba权限即可创建)
CREATE SYNONYM synonym_name FOR table.column虽然也正常创建,但是select * from synonym_name会报错ORA-00980:同义词转换不再有效
创建视图语法
CREATE [OR REPLACE] VIEW view_name as subquery
用户必须具备对象权限才可创建(比如select * from table1授予用户dba权限也不行,必须单独授予用户table1的对象,grant select on table1 to user)
目前public对象使用较多的就是db_link、SYNONYM两类
临时表创建时虽然要加public,但是owner不是public,owner就是创建它的用户,而且dba_tables.tablespace_name为空。
ALL、DBA、USER开头的一般都是公共同义词如下
CREATE OR REPLACE PUBLIC SYNONYM ALL_TABLES FOR SYS.ALL_TABLES;
CREATE OR REPLACE PUBLIC SYNONYM DBA_TABLES FOR SYS.DBA_TABLES;
CREATE OR REPLACE PUBLIC SYNONYM USER_TABLES FOR SYS.USER_TABLES;
SYS下ALL、DBA、USER开头的就是视图了
CREATE OR REPLACE FORCE VIEW SYS.DBA_TABLES(字段1,字段2,...)
AS SELECT.....
1. 同义词和视图都不占空间,在user_segments.segment_name一栏没有同义词和视图的对象
2. 物化视图占用空间,但是在user_segments.segment_type显示的值是table而不是MATERIALIZED VIEW
3. Schema下的对象可以和公共同义词同名,但是同一schema下各类对象之间不能同名,比如同一个用户下不能同在同样名称的表、视图、私有同义词,否则报错ORA-00955:名称已由现有对象使用
4. 对表进行DDL操作后,视图或同义词的状态会变成INVALID;当再次引用这个视图或同义词时,视图或同义词会自动编译不用刷新,状态会变成VALID,无需人工干预,当然前提是不改变原对象的名称;而MV需要自动刷新或者手动刷新的,
5. 存在同名对象(表、视图、私有同义词)和公共同义词时,数据库优先选择对象作为目标,最后才是公共同义词
6. Desc的对象可以是表、视图、私有同义词、公共同义词
7. 综合上面5、6得出结论:select * from name1时,是先看表是否有叫name1的对象,再看视图是否有叫name1的对象,再看私有同义词是否有叫name1的对象,最后才看公共同义词是否有叫name1的对象,如果都没有则报错ORA-00942:表或视图不存在
8. 视图和同义词不能执行修改字段类型长度的操作,但是可以执行dml语句如update、delete,修改的数据最终是base table上的数据
9. MV也可以直接update、delete,但是不影响base table
10.同义词可以创建在视图CREATE SYNONYM SYNONYM_NAME for VIEW_NAME
11.同义词只能在建立一个对象上,比如一张表或一张视图,视图可以建立在多张表上,建立在多张表上的视图也可以建立同义词。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30126024/viewspace-2122000/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30126024/viewspace-2122000/