2016-04-07 17 views
-4

別のスキーマの表のシノニムがある場合は、シノニムに挿入できますか? もしそうなら、元のテーブルにも影響しますか?Oracleの同義語への挿入

+2

Aを使用することができますシノニムは単なるオブジェクトへのポインタです。したがって、ローカル・オブジェクトのようにSQLコード内で扱うことができ、それに対して実行されるDML操作は、ポイントされたオブジェクトに対して実行されます。 –

答えて

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 

シノニムを削除すると、

あなたがにschema.tableを使用する必要があり、データやテーブルがまだ残っていない
SQL> drop synonym my_synonym; 

Synonym dropped. 

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