- 作者:xiaoxiao
- 发表时间:2020-12-23 10:55
- 来源:未知
因为所有的操作最终都作用在基表上,因此基表名和列名的变化会对这些语句产生影响,此时必须修改所有的语句,这样不但麻烦,有时甚至会发生错误。另外,有的甚至表名和列名复杂而晦涩,用起来极不方便。怎样才能解决这个问题呢?避免直接依赖于基表的问题,方法有:
●使用视图为表名和列名起别名,在应用过程中可以借助视图中的名字来代替基表名和列名,当表名和列名改变时,只需改变相应视图的定义即可。
●类似于视图定义,只不过提供了一种更直接更广泛的方法来为各种对象定义别名,其中也包括视图对象。
●在程序中用定义光标的方法防止直接依赖于表。当表名改变时,只需改变光标定义即可。
一、使用视图(略)
二、使用同义名
1、简介
和使用视图来实现操作不直接依赖于基表一样,同义名也能实现这一目的。与视图不同的是同义名不但可以应用在表的命名中,同样也可以应用在视图、序列、存储过程和函数以及包中,因此它的应用范围更广泛。用同义名的不便之处是它不能对列起别名,这一点不如视图。
创建同义名的语法如下所示:
create [public]synonym 同义名 for 对象;
其中:
●public:公共同义名,所有用户都可以引用,若省略此关键字不写,则默认是private同义名,即私有同义名,它只能为某一用户使用。
●同义名:为对象起的别名,在以后使用对象时可以用此名来代替原对象名。
●对象:某一特定对象名,它可以是基表、视图、序列、过程、存储函数、存储包和其它同义名,指定对象时可以指定所属用户,中间用“.”分开。
2、具体操作
●创建私有同义名
【例】为persons表起同义名为person。
sql>create synonym person for persons;
此外用的是默认private同义名,只能为当前用户使用。若要指定其为另一用户使用,比如用户jxl,则可用以下语句创建。
sql>create synonym person fro jxl.persons;
●创建公共同义名
也可以创建公共同义名给所有用户使用
【例】
sql>create public synonym person fro persons;
●使用同义名
创建了同义名之后,就可以在其他地方引用它,以此来代替基表的引用。如下所示:
sql>insert into person values(98036,'Skert','W',to_date('25-OCT-71'));
在以后使用过程中,若基表的名字变了,只需修改同义名的定义即可。但同义名创建不支持replace命令,因此必须将其删除再重新创建。删除命令如下: