【问题标题】:Inserting to Oracle Synonym插入到 Oracle 同义词
【发布时间】:2016-04-07 11:19:41
【问题描述】:

如果我有另一个模式的表的同义词,我可以插入同义词吗? 如果是,会不会也影响原表?

【问题讨论】:

  • 同义词只是指向对象的指针。因此,您可以在 SQL 代码中将其视为本地对象,对它执行的任何 DML 操作都将在指向的对象上执行。

标签: database oracle synonym


【解决方案1】:

同义词不是“真正的”对象,而只是一个指向对象的指针;所以,无论你对同义词做什么,你都是在被引用的对象上做的。

您可以通过显式编写架构来访问不同架构中的表:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-06
    • 2021-09-17
    • 2011-05-01
    • 2010-09-21
    • 2011-10-04
    • 1970-01-01
    • 1970-01-01
    • 2014-11-16
    相关资源
    最近更新 更多