Database 插入到Oracle同义词
如果我有另一个模式的表的同义词,我可以插入同义词吗?Database 插入到Oracle同义词,database,oracle,synonym,Database,Oracle,Synonym,如果我有另一个模式的表的同义词,我可以插入同义词吗? 如果是这样,它还会影响原始表吗?同义词不是真正的对象,只是指向对象的指针;所以,无论你对同义词做什么,你都是在引用的对象上做的 通过显式写入模式,可以访问不同模式中的表: SQL> select count(1) from sys.sys_table; COUNT(1) ---------- 0 SQL> select count(1) from sys_table; select count(1) fr
如果是这样,它还会影响原始表吗?同义词不是真正的对象,只是指向对象的指针;所以,无论你对同义词做什么,你都是在引用的对象上做的 通过显式写入模式,可以访问不同模式中的表:
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> 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.
SQL> drop synonym my_synonym;
Synonym dropped.
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
。。。或使用schema.table:
无论您如何操作,都会插入所有行:
SQL> select count(1) from sys.sys_table;
COUNT(1)
----------
2
SQL> select count(1) from my_synonym;
COUNT(1)
----------
2
如果你放弃同义词
SQL> insert into my_synonym values (1);
1 row created.
SQL> drop synonym my_synonym;
Synonym dropped.
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
您需要使用schema.table,数据和表仍然保留:
SQL> select count(1) from sys.sys_table;
COUNT(1)
----------
2
但是,当然,你不能再使用同义词了
SQL> insert into my_synonym values (1);
1 row created.
SQL> drop synonym my_synonym;
Synonym dropped.
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
同义词只是指向对象的指针。因此,您可以在SQL代码中将其视为本地对象,对其执行的任何DML操作都将在指向的对象上执行。