Frage

Ich habe zwei Schemata: A und B (Oracle 9). Auf der A gibt es eine dblink nach B. An der B ein Paket ist, dass ich von A. Verfahren in B-Paket nennt Renditen Zählergebnisse Größe variiert und ich denke, dass eine Sammlung der Rückkehr ist ein besserer Weg, aus diesem Grund.

create type B.tr_rad as object (
  name     varchar2(64)
 ,code     number
 ,vendor   number
 ,val      varchar2(255)
 ,num      number
);

create type B.tt_rad as varray(256) of B.tr_rad;

Aber von einem Schema kann ich nicht tt_rad Typen verwenden, da die Verwendung von SQL-Typen von dblink wird nicht unterstützt. DBMS_SQL nicht Cursor unterstützt. Erstellen Typen gleiche OID ist nicht möglich.

Ich denke, temporäre Tabellen zu verwenden. Aber erstens ist es nicht so gut (nach der Remote-Funktion, um den Wert zurückgibt, Seite aufrufen muss Sammlung von Remote-Tabelle auswählen). Und es gibt die Angst vor einer Verlangsamung der Arbeit mit temporären Tabellen.

Vielleicht, wer weiß die alternative Interaktion?

War es hilfreich?

Lösung

Ich habe in der Vergangenheit ähnliche Probleme hat. Dann habe ich zu dem Schluss gekommen, dass im Grunde Oracle db Links „gebrochen“ für alles andere als einfache SQL-Typen sind (vor allem UDT, CLOBS kann Probleme haben, XMLType kann auch). Wenn Sie die OID Lösung arbeiten dann viel Glück für Sie bekommen können.

Die Lösung, die ich zurückgegriffen war eine gespeicherte Java-Prozedur zu verwenden, anstelle des DB-Link.

Merkmale der Java Stored Procedure:

  1. Kann eine "breite Palette von Typen" zurückzukehren, nur um alle komplexen Typen (UDT, Tabellen / Arrays / VARRAYs) finden Sie unter Oracle Online-Dokumentation . Oracle hat eine viel bessere Arbeit der Rangier-Komplex (oder reich) Typen von Java, als von einem DBLink.
  2. Gespeicherte Java kann die „Standardverbindung“ (läuft in der gleichen Sitzung wie die SQL-Verbindung zum db - keine Authentifizierungsproblemen) erwerben.
  3. Gespeicherte Java ruft die PL / SQL proc auf der Remote-DB und die Java-JDBC-Schicht funktioniert das Marshalling von der entfernten DB.
  4. Gespeicherte Java-Pakete das Ergebnis und gibt die Ergebnisse an den SQL oder PL / SQL-Schicht.

Es ist ein bisschen Arbeit, aber wenn Sie ein wenig von Java haben, sollten Sie in der Lage sein, „cut and paste“ gemeinsam eine Lösung aus der Oracle-Dokumentation und Beispiel.

Ich hoffe, das hilft.

Andere Tipps

Eine alternative Interaktion haben eine Datenbank mit Schemata A und B statt zwei Datenbanken mit einer Datenbank zu verknüpfen.

Meine Lösung. Auf der Seite B i erstellen temporäre Tabelle wie die Sammlung Datensatz. Am A Seite Ich habe einen DBMS_SQL Wrapper, den Vorgang über dblink aufruft. Dieses Verfahren schreibt Ergebnis Sammlung in der temporären Tabelle. Nach dem erfolgreichen Verfahren i Fern Abschlusses wählen Ergebnisse aus Fern temporärer Tabelle und verwandelt es zu lokalem Kollektionstyp.

Einschränkungen 1. die Notwendigkeit einer ständigen Objektsynchronisation. 2. Unmöglichkeit verwendet A-Seite Verfahren (der Remote Procedure Call) in SQL-Abfrage. 3. die Komplexität der Verwendung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top