【发布时间】:2016-04-07 11:19:41
【问题描述】:
如果我有另一个模式的表的同义词,我可以插入同义词吗? 如果是,会不会也影响原表?
【问题讨论】:
-
同义词只是指向对象的指针。因此,您可以在 SQL 代码中将其视为本地对象,对它执行的任何 DML 操作都将在指向的对象上执行。
如果我有另一个模式的表的同义词,我可以插入同义词吗? 如果是,会不会也影响原表?
【问题讨论】:
同义词不是“真正的”对象,而只是一个指向对象的指针;所以,无论你对同义词做什么,你都是在被引用的对象上做的。
您可以通过显式编写架构来访问不同架构中的表:
SQL> select count(1) from sys.sys_table;
COUNT(1)
----------
0
SQL> select count(1) from sys_table;
select count(1) from sys_table
*
ERROR at line 1:
ORA-00942: table or view does not exist
创建同义词
SQL> create synonym my_synonym for sys.sys_table;
Synonym created.
那么就可以使用同义词来访问表了:
SQL> select count(1) from my_synonym;
COUNT(1)
----------
0
但是你还是不能直接访问表:
SQL> select count(1) from sys_table;
select count(1) from sys_table
*
ERROR at line 1:
ORA-00942: table or view does not exist
您可以使用同义词插入表中
SQL> insert into my_synonym values (1);
1 row created.
...或使用schema.table:
SQL> insert into sys.sys_table values (2);
1 row created.
不管你怎么做,所有的行都被插入:
SQL> select count(1) from sys.sys_table;
COUNT(1)
----------
2
SQL> select count(1) from my_synonym;
COUNT(1)
----------
2
如果你放弃同义词
SQL> drop synonym my_synonym;
Synonym dropped.
你需要使用schema.table,数据和表依然存在:
SQL> select count(1) from sys.sys_table;
COUNT(1)
----------
2
但是,当然,你不能再使用同义词了
SQL> select count(1) from my_synonym;
select count(1) from my_synonym
*
ERROR at line 1:
ORA-00942: table or view does not exist
【讨论】: