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. |