![]() |
Outerjoin über zwei Datenbankinstanzen in Oracle
Ich brauche einen Outerjoin über 2 Datenbankinstanzen und die Möglichkeit, wie ich diesen von Delphi aus absetze. :wall:
|
Re: Outerjoin über zwei Datenbankinstanzen in Oracle
liegen die DB-Instanzen auf der gleichen Maschine?
|
Re: Outerjoin über zwei Datenbankinstanzen in Oracle
Ja, auf dem gleichen Server!
|
Re: Outerjoin über zwei Datenbankinstanzen in Oracle
Mit DB Links ist das ziemlich easy. ;)
DB liegt auf anderer Maschine:
SQL-Code:
Auf der gleichen Maschine reicht das:
CREATE DATABASE LINK ServiceName.Domain.de
CONNECT TO CURRENT_USER USING 'ServiceName';
SQL-Code:
Bei beiden Schnipseln wird mit dem gleichen Username/password des aktuellen Schemas eine Anmeldung auf die Remote DB gemacht.
CREATE DATABASE LINK ServiceName
CONNECT TO CURRENT_USER; ServiceName ist der Service Name der Remote DB Domain.de muss mit der richtigen Domäne ersetzt werden
SQL-Code:
Mit Shared DB Links geht die Netzwerk Performance auch bei vielen parallelen sessions nicht in die Knie.
SELECT emp.ename, emp.DeptNo, dept.loc
FROM scott.emp emp ,scott.dept@DeinDBLink dept WHERE emp.DeptNo = dept.DeptNo Zitat:
|
Re: Outerjoin über zwei Datenbankinstanzen in Oracle
Wir erstellen unseren Link folgendermaßen:
SQL-Code:
Dieser Befehl funktioniert auch, aber die Abfrage liefert nur die Teilmenge einer Spalte, und in der anderen 'NULL'.
create public database link test connect to dbdoku identified by "dbdoku" using 'DBTEST';
Abfrage:
SQL-Code:
oder:
SELECT T.Tabellenname, A.Table_name FROM All_Tables A, TTabellen@Test T WHERE T.Tabellenname = A.Table_name(+) and owner = 'DBTEST';
SQL-Code:
Wo liegt der Fehler in unseren SQL-Befehlen?
Select T.Tabellenname, A.Table_name FROM All_Tables A right join TTabellen@Test T ON T.Tabellenname = A.Table_name;
Schon jetzt, danke für die Mühe. |
Re: Outerjoin über zwei Datenbankinstanzen in Oracle
Das sieht so schon OK aus...
Frage: Ist DBTest wirklich ein User, der die Tabellen besitzt? Wenn ja, hat der User DBDoku darauf SELECT-Rechte? (Nur dann sind sie in all_Tables aufgelistet) |
Re: Outerjoin über zwei Datenbankinstanzen in Oracle
DBTEST ist eine DB-Instanz.
DBDOKU hat auf DB-Instanz 'DBBE' Rechte zum auslesen der eigenen Tabellen. |
Re: Outerjoin über zwei Datenbankinstanzen in Oracle
Das Problem scheint ganz einfach...
SQL-Code:
.. zu sein.
And Owner = 'DBTEST';
Du fragst ja damit die Tabellen in dem USER DBTEST ab. |
Re: Outerjoin über zwei Datenbankinstanzen in Oracle
Die Abfrage ist in sofern falsch, weil sie bei einer Abfrage bei der Tabelle A (Tabelle von OuterJoin, die mehr Werte liefern soll) richtige Werte bringt, aber bei Tabelle B (Tabelle, die nur übereinstimmende Werte liefern darf) immer nur 'NULL' zurückliefert!
Dadurch ist natürlich kein Vergleich möglich. Liegt das am SQL-Befehl, oder am Datenbank-Link? |
Re: Outerjoin über zwei Datenbankinstanzen in Oracle
Was bekommst du denn dabei?
SQL-Code:
Hast du dann alle Tabellen?
SELECT T.Tabellenname
FROM TTabellen@Test T |
Re: Outerjoin über zwei Datenbankinstanzen in Oracle
Bei den Einzelabfragen wie
SQL-Code:
oder
SELECT T.Tabellenname
FROM TTabellen@Test T
SQL-Code:
erhalte ich die richtigen Ergebnisse.
SELECT Table_name
FROM All_tables where owner = 'DBTEST' |
Re: Outerjoin über zwei Datenbankinstanzen in Oracle
Kenne Oracle nicht. Wenn owner kein Feld in der Tabelle "All_Tables ist, dann wird das wohl nicht gehen ansonsten versuch mal:
SQL-Code:
Gruß
SELECT T.Tabellenname
, A.Table_name FROM All_Tables A LEFT OUTER JOIN TTabellen@Test T --Left outer sollte die Lösung bringen... ON T.Tabellenname = A.Table_name WHERE A.owner = 'DBTEST' |
Re: Outerjoin über zwei Datenbankinstanzen in Oracle
Ich versuche es momentan mit einer Delphi-Lösung abzufangen.
|
Re: Outerjoin über zwei Datenbankinstanzen in Oracle
Wenn Leuselators Abfrage nicht klappt dann fresse ich einen Besen! :mrgreen:
Was mich dabei stört ist, dass es damit auch hätte klappen müssen. :gruebel:
SQL-Code:
SELECT T.Tabellenname
,A.Table_Name FROM All_Tables A ,TTabellen@Test T WHERE A.Table_Name = T.Tabellenname(+) And Owner = 'DBTEST' |
Re: Outerjoin über zwei Datenbankinstanzen in Oracle
Danke für die Hilfe.
Ich habe das Problem über Delphi gelöst (es soll später einmal eine Update-Funkion werden). Ich erstelle jetzt zwei getrennte Abfragen, die ich in 2 Arrays einlese und danach vergleiche. Ich habe den OuterJoin noch einmal ausprobiert. Er funktioniert jetzt mit den Daten, die ich mit der Funktion abgeglichen habe, mit den Testdaten funktioniert es immer noch nicht. Es muß an den Datentypen liegen. Nachdem ich jetzt eine Lösung habe, brauche zu diesem Theme keine Lösung mehr. Nochmals Danke Tobi |
Re: Outerjoin über zwei Datenbankinstanzen in Oracle
Heißt das, dass ich jetzt keinen Besen fressen muss :?: :roll:
:mrgreen: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz