现在的位置: 首页 > 综合 > 正文

Oracle 同义词

2018年05月11日 ⁄ 综合 ⁄ 共 2305字 ⁄ 字号 评论关闭

1. Oracle同义词简介
Oracle数据库中提供了同义词管理的功能。同义词是数据库方案对象的一个别名,经常用于简化对象访问和提高对象访问的安全性。在使用同义词时,Oracle数据库将它翻译成对应方案对象的名字。与视图类似,同义词并不占用实际存储空间,只有在数据字典中保存了同义词的定义。在Oracle数据库中的大部分数据库对象,如表、视图、同义词、序列、存储过程、包等等,数据库管理员都可以根据实际情况为他们定义同义词。
同义词拥有如下好处:节省大量的数据库空间,对不同用户的操作同一张表没有多少差别;扩展的数据库的使用范围,能够在不同的数据库用户之间实现无缝交互;同义词可以创建在不同一个数据库服务器上,通过网络实现连接。 
 
2. Oracle同义词的分类 

Oracle同义词有两种类型,分别是公用Oracle同义词与私有Oracle同义词。 
1) 公用Oracle同义词:
a) 由一个特殊的用户组Public所拥有。顾名思义,数据库中所有的用户都可以使用公用同义词。公用同义词往往用来标示一些比较普通的数据库对象,这些对象往往大家都需要引用。 
2) 私有Oracle同义词:
a) 它是跟公用同义词所对应,他是由创建他的用户所有。当然,这个同义词的创建者,可以通过授权控制其他用户是否有权使用属于自己的私有同义词。 
3. Oracle同义词创建及删除 
创建公有Oracle同义词的语法:Create [public] synonym 同义词名称 for [username.]objectName; 
Drop [public] synonym 同义词名称
4. 实例测试
本地数据库:192.168.7.17 ******/******
远程数据库:192.168.7.11 ******/******
远程数据库准备工作:
1.创建数据表
create table TBTEST
(
  id        NUMBER not null,
  firstname NVARCHAR2(20),
  lastname  NVARCHAR2(20)
)
2.创建序列
create sequence TESTSEQ
minvalue 0
maxvalue 9999999999999999999999999999
start with 0
increment by 1
cache 20;
3.储存过程
create or replace procedure testproc(firstname in varchar,lastname in varchar)
is 
begin
  insert into tbtest values(testseq.nextval,firstname,lastname);
  commit; 
end;
4. 函数
create or replace function testfunc(tid in number) return varchar2 is
  retvalue varchar2(50);
  firstname varchar2(20);
  lastname varchar2(20);
begin
  dbms_output.put_line(tid);
  select t.firstname,t.lastname into firstname,lastname from tbtest t where t.id=tid;
  retvalue:=firstname||' '||lastname; 
  return(retvalue);
end; 
5.视图
 create or replace view testview as
select * from tbtest t;
本地数据库测试:
1.创建序列的同义词
create synonym seq for testseq@nrmis.nrmsdb;
测试:
select seq.nextval from dual;
结果:4
结论:sequence可以创建同义词并且能够使用
2.创建表的同义词
create synonym tbtest for tbtest@nrmis.nrmsdb;
  测试:
select * from tbtest;
  结论:表的同义词可以使用
3.测试表的插入
insert into tbtest values(seq.nextval,'first','last');
select * from tbtest;
结果:
5 first
last
2 yu deyang
4.  创建存储过程同义词
create synonym proc for testproc@nrmis.nrmsdb;
    调用储存过程
    call proc('firstname','lastname');
结果:
1 5 firstlast
2 6 firstnamelastname
3 2 yudeyang
5.创建函数的同义词
   create synonym func for testfunc@nrmis.nrmsdb;
   select func(5) from dual;
  结果:
1 first last
6.创建视图同义词
   create synonym tview for testview@nrmis.nrmsdb;
   select * from tview;
   结果:
1 5 firstlast
2 6 firstnamelastname
3 2 yudeyang

5. 性能相关
在oracle 9i 升级到oracle 10g或oracle 11g的时候可能会有性能问题,请参考http://www.zlsoft.com/techbbs/dispbbs.asp?boardid=3&id=50337看是否符合。(如果对同义词再建同义词,ORACLE 9.2.01有一个严重BUG, ORACLE 10G对视图进行了修改,如果我们系统中没有使用对同义词再建同义词,我们可以修改10g或者11g视图。)

抱歉!评论已关闭.