[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jan 2003
    Beiträge
    290

    Post SQL Verknüpfung Sätze Datei AS400 und Table fremder DB z.B. PostGreSql

    Hallo zusammen,
    gibt es eine Möglichkeit, in einem SQL-Befehl (oder View o.a.) Daten aus einer AS400-Datei mit Daten aus einer Fremd-DB zu verknüpfen, und zwar "Performant" ???

    Hintergrund
    Ich habe auf einem WinServer eine PostGreSQL-Datenbank, Zugriff über das JVAGATE von Dieter Bender und RPG-Programmen.
    Der "alleinige" Zugriff auf die PostGres-Daten oder qualifiziert, hier z.B. mit einer Kundennr., läuft super und auch performant.

    Das Ganze läuft bei mir in einer Weboberfläche mit IBM Net.Data, ich lese mit SQL die Daten aus der AS400-Datei, dann rufe ich das RPG-Programm auf, das gibt mir die Daten aus der PostGreSQL-Tabelle als Net.Data-Tabellenobjekt zurück, und ich "mische" die Daten der Net.Data Ergebnistabelle aus dem SQL und dem Aufruf des RPG-Programmes.

    Beide Datenbanken, also db2/i und PostGreSQL, mit reiner "Net.Data SQL-Funktionalität" zu verarbeiten ist leider nicht möglich, verständlich, ein Programm kann sich für einen SQL-Zugriff auch nur mit einer DB "gleichzeitig" verbinden.

    Jetzt aber muss ich n-Kunden per SQL aus der AS400 lesen, und dabei, zumindest jetzt im 1.Schritt, würde ich gerne mit einem "Subselect" im SQL-Befehl aus Net.Data heraus das Ergebniss aus einem "Select count(*) from PostGres" in die Ergebnistabelle einbinden.

    In Sachen "eigener SQL-Function" oder "Procedur" bin ich jetzt nicht der "Erfahrenste", aber ich denke in die Richtung könnte es vielleicht funktionieren ?!?!?!

    Kann mir jemand sagen, ob überhaupt, und wenn ja, wie das realsiert werden kann ???
    Vielleicht die liebe Birgitta ???


    Danke vorab und schon einmal "Frohe Ostern" !
    Peet

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Per SQL ist ein direkter Zugriff auf 2 verschiedene Datenbanken leider nicht vorgesehen.
    Es klappt weder ein "insert into ... select ... from " noch ein Join.
    Du hast da leider nur die Möglichkeit, die Daten zwischen den DB's über eigene Tabellen zu synchronisieren.
    Eine Prozedur oder auch Table-Function kann da zwar helfen, wird aber i.d.R. nicht performant sein, da ja die Where-Klausel u.U. nicht klappt.

    Und wer behauptet denn sowas "ein Programm kann sich für einen SQL-Zugriff auch nur mit einer DB "gleichzeitig" verbinden."?
    Natürlich kann man sich durchaus gleichzeitig mit mehreren DB's verbinden.
    Dafür gibt es
    a) "Connect to" zur Ziel-Datenbank
    b) "Connect reset" zur lokalen Datenbank
    Diese Befehle können beliebig oft wiederholt werden, wobei der Connect To nur beim 1. Aufruf tatsächlich eine neue Verbindung erstellt.
    Geschlossen werden die Verbindungen erst am Ende.

    Es gibt allerdings noch eine 2. Möglichkeit:
    Ein Tabellenname ist eigentlich 3-teilig:
    - DBName/Schema/Table
    - DBname.Schema.Table
    je nach Namenskonvention.
    Da die Namenskonvention aber für das Gesamtprogramm gilt und andere DB's eher selten mit "/" zurechtkommen, bietet sich halt Naming=*SQL eher an.

    Somit kann man mit:
    select * from MyLib.MyTable
    bzw.
    select * from DestDB.Schema.Table
    unter Umgehung des Connects aus beliebigen DB's innerhalb des Programmes lesen.
    Per "CREATE ALIAS MYLIB/MYTABLE FOR DestDB.Schema.Table" kann man das noch anonymisieren.

    Für das JVAGATE/ArdGate kann man in der Konfiguration einen Defaultuser/Kennwort hinterlegen.
    Für AS/400-Verbindungen kann man per
    ADDSVRAUTE USRPRF(*CURRENT) SERVER(RDBName) PASSWORD(MEINPASSW)
    das Verbindungskennwort permanent hinterlegen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Jan 2003
    Beiträge
    290
    Und wer behauptet denn sowas "ein Programm kann sich für einen SQL-Zugriff auch nur mit einer DB "gleichzeitig" verbinden."?
    Natürlich kann man sich durchaus gleichzeitig mit mehreren DB's verbinden.
    Dafür gibt es
    a) "Connect to" zur Ziel-Datenbank
    b) "Connect reset" zur lokalen Datenbank
    usw....

    Hallo Fuerchau,
    das weiß ich doch selber...
    GLEICHZEITIG !!!! ...also im Sinne meiner Anfrage !!!!





    Zitat Zitat von Fuerchau Beitrag anzeigen
    Per SQL ist ein direkter Zugriff auf 2 verschiedene Datenbanken leider nicht vorgesehen.
    Es klappt weder ein "insert into ... select ... from " noch ein Join.
    Du hast da leider nur die Möglichkeit, die Daten zwischen den DB's über eigene Tabellen zu synchronisieren.
    Eine Prozedur oder auch Table-Function kann da zwar helfen, wird aber i.d.R. nicht performant sein, da ja die Where-Klausel u.U. nicht klappt.

    Und wer behauptet denn sowas "ein Programm kann sich für einen SQL-Zugriff auch nur mit einer DB "gleichzeitig" verbinden."?
    Natürlich kann man sich durchaus gleichzeitig mit mehreren DB's verbinden.
    Dafür gibt es
    a) "Connect to" zur Ziel-Datenbank
    b) "Connect reset" zur lokalen Datenbank
    Diese Befehle können beliebig oft wiederholt werden, wobei der Connect To nur beim 1. Aufruf tatsächlich eine neue Verbindung erstellt.
    Geschlossen werden die Verbindungen erst am Ende.

    Es gibt allerdings noch eine 2. Möglichkeit:
    Ein Tabellenname ist eigentlich 3-teilig:
    - DBName/Schema/Table
    - DBname.Schema.Table
    je nach Namenskonvention.
    Da die Namenskonvention aber für das Gesamtprogramm gilt und andere DB's eher selten mit "/" zurechtkommen, bietet sich halt Naming=*SQL eher an.

    Somit kann man mit:
    select * from MyLib.MyTable
    bzw.
    select * from DestDB.Schema.Table
    unter Umgehung des Connects aus beliebigen DB's innerhalb des Programmes lesen.
    Per "CREATE ALIAS MYLIB/MYTABLE FOR DestDB.Schema.Table" kann man das noch anonymisieren.

    Für das JVAGATE/ArdGate kann man in der Konfiguration einen Defaultuser/Kennwort hinterlegen.
    Für AS/400-Verbindungen kann man per
    ADDSVRAUTE USRPRF(*CURRENT) SERVER(RDBName) PASSWORD(MEINPASSW)
    das Verbindungskennwort permanent hinterlegen.

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... InfoSphere Federation Server kann sowas, kostet allerdings einiges und braucht einen zusätzlichen p-series Server und aufwändige Konfiguration und brummt nur, wenn die Daten auf eine Maschine repliziert werden. MS SQL linked Server kann sowas und holt die remote Tabelle dann adhoc rüber - mit entsprechend lausiger Performance.

    Performant wird das ohnehin nur, wenn man entweder die remote Tabelle lokal repliziert oder die lokale remote. Von DB2/400 auf eine andere Büchse kann man durchaus per Trigger und ArdGate replizieren, ist aber ein wenig tricky.

    Three part alias hilft hier wenig, da man damit nur eine remote Abfrage in eine lokale Tabelle ausgeben kann (im Prinzip nix anderes wie OUTPUT(*OUTFILE) bei QMQRY - uralter Wein in nichtmal neuen Schläuchen).

    ADDSRVAUTE geht auch mit ArdGate connections.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

Similar Threads

  1. Zugriff auf eine PostgreSQL - Linuxserver
    By lucullus in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 08-11-21, 10:58
  2. SQL Sätze löschen, wenn nicht in Datei vorhanden
    By programmer400 in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 06-06-16, 20:45
  3. FTP Datei von AS400 an Server X
    By Malte in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 04-11-13, 15:46
  4. AS400-Datei im IFS abstellen
    By bds in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 04-09-02, 08:36
  5. Sätze einer Datei zählen
    By Ursus in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 09-08-01, 07:59

Tags for this Thread

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •