Zurück

Arbeiten mit mehreren Oracle Tabellen mit gleichem Namen

Oft ist es wünschenswert mit verschiedenen Versionen von Tabellen zu arbeiten. Da jedes Objekt einem bestimmten Oracle-Schema angehört, können auf einfache Weise mehrere Tabellen mit dem gleichen Namen benutzt werden. Auf die DEFAULT-Tabellen werden PUBLIC Synonyme gelegt, auf die anderen Tabellen legt jeder Oracle Benutzer seine eigenen PRIVATE Synonyme. PRIVATE Synonyme übersteuern immer die PUBLIC Synonyme.

Um also verschieden Tabelle mit dem gleichen Namen anzusprechen gibt es zwei Möglichkeiten:

1). Direkt via Schema-Namen ansprechen

    Beispiel:
    SELECT COUNT(*) FROM scott.emp;

2). Privates Synonym erstellen

    Beispiel:
    a). Connecten unter dem gewünschten Account
    sqlplus zahn/<pwd>
    SQL> describe emp;
    Name                            Null?    Type
    ------------------------------- -------- ----
    EMPNO                           NOT NULL NUMBER(4)
    ENAME                                    CHAR(10)
    JOB                                      CHAR(9)
    MGR                                      NUMBER(4)
    HIREDATE                                 DATE
    SAL                                      NUMBER(7,2)
    COMM                                     NUMBER(7,2)
    DEPTNO                          NOT NULL NUMBER(2)
    Die DEFAULT Tabelle scott.emp ist ersichtlich via
    PUBLIC Synonym.
    b). Privates Synonym erstellen
    SQL> CREATE SYNONYM emp FOR zahn.emp;
    SQL> DESCRIBE emp;
    Name                            Null?    Type
    ------------------------------- -------- ----
    EMPNO                           NOT NULL NUMBER(4)
    ENAME                                    CHAR(10)
    JOB                                      CHAR(9)
    MGR                                      NUMBER(4)
    COMM                                     NUMBER(7,2)
    DEPTNO                          NOT NULL NUMBER(2)
    Die eigene Tabelle emp ist ersichtlich (es fehlen
    die Felder HIREDATE und SAL). Damit wird das
    PUBLIC Synonym für den aktuellen Benutzer
    übersteuert und man sieht unter emp dann
    effektiv die Tabelle zahn.emp.
    c). Wieder zurückwechseln
    Wenn man das Synonym nicht mehr braucht, dann dieses
    wieder löschen.
    SQL> DROP SYNONYM emp;
    SQL> desc emp;
    SQL> describe emp;
    Name                            Null?    Type
    ------------------------------- -------- ----
    EMPNO                           NOT NULL NUMBER(4)
    ENAME                                    CHAR(10)
    JOB                                      CHAR(9)
    MGR                                      NUMBER(4)
    HIREDATE                                 DATE
    SAL                                      NUMBER(7,2)
    COMM                                     NUMBER(7,2)
    DEPTNO                          NOT NULL NUMBER(2)
    Nun erscheint wieder die DEFAULT Tabelle scott.emp.