[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Mar 2006
    Beiträge
    27

    "variable" Tabellen-Namen im embedded SQL?

    Moin zusammen,

    ich habe ein Problem, bei dem ich mich schwer tue den Ablauf in Worte zu fassen. Trotzdem hoffe ich, dass mir jemand aus der Beschreibung einen Tipp geben kann, der mich in der Analyse bzw. der Problem-Lösung weiterbringt.

    Mein SOAP-WebService beinhaltet mehrere Methoden, die Daten für das FrontEnd (.NetCore/C#/WCF-Client) bereitstellen.
    Hierfür werden - zum Teil sehr umfangreiche - SQL's (CTE) in einem RPG-Programm (embedded SQL) verwendet. Die Daten werden aus gleichnamigen Tabellen/Dateien in unterschiedlichen Bibliotheken ermittelt.
    Um zu vermeiden dass die SQL dynamisch als String aufbereitet werden müssen oder mit unterschiedlichen Bibliotheken dupliziert werden müssen, werden über den Abrechnungszeitraum gesteuert Alias's mit den erforderlichen Bibliotheken in QTEMP erstellt (aktuelle Periode / Vor-Periode / Archiv-Periode). Die Alias's werden zum Ende der Methode wieder gelöscht, da für die nächste Anfrage möglicherweise Daten aus einer anderen Periode ermittelt werden müssen.

    Wenn ich das richtig weiß wird für jeden WebService nur ein QZRCSRVS-Job gestartet, was dazu führt dass alle Aufrufe der Methoden des WebService in dem gleichen QZRCSRVS-Job laufen.
    Durch die ansteigende Anzahl User kommt es jetzt scheinbar zu Parallel-Verarbeitungen(???)
    Meine Vermutung ist nun, dass damit auch alle Methoden-Aufrufe die gleiche QTEMP und damit die gleichen Alias's nutzen, bzw. die Alias's löschen, während ein anderer Methoden-Aufruf diese noch verwendet.

    Der Fehler im JobLog zeigt sich wie folgt:

    Funktionsfehler X'1720' in Maschineninstruktion. Interne
    Speicherauszugs-ID ████████.
    *** DBOP open FAILED. Exception from call to SLICÜ ***.
    Interner Fehler im Abfrageprozessor.
    SQL-Systemfehler.
    Cursor CRSNEVGL nicht geöffnet.

    Leider lässt sich mit embedded SQL nicht einfach der Tabellen-Name als Variable zuordnen - wie es native möglich ist (dBeaver).

    Welche Möglichkeiten habe ich um eine fehlerfreie Parallel-Verarbeitung zu gewährleisten oder muss der Fehler doch anderswo liegen???

    Viele Grüße aus dem hohen Norden
    Wolfgang

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Konzeptioneller Fehler.
    Tabellennamen können eben nicht dynmaisch in statischen SQL-Anweisungen verwendete werden.
    In Clientanwendungen sind SQL's generell dynamisch. Statische SQL's kennt man da fast gar nicht.
    Es gibt da noch ein paar Altsprachen, wo dies ebenso gemacht wurde, in modernen ist das definitiv nicht mehr so.
    Du kannst aber relativ einfach aus statischen SQL's eben dynamische SQL's machen.
    Je Hostvariable ein "?" und beim Execute eben per Using wieder anfügen.
    Dabei kannst du den Tabellennamen halt wechseln.
    Alles andere macht hierfür eben keinen Sinn.
    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

Similar Threads

  1. Antworten: 2
    Letzter Beitrag: 27-05-19, 13:56
  2. SQL Globale Variable für "where in ..."
    By oulbrich in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 15-11-17, 12:38
  3. MinusField falsche Darstellung "ü" statt "-"
    By Edi in forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 07-11-14, 08:52
  4. Variable als Selektionsbegriff im "in" bei embedded SQL
    By dschroeder in forum NEWSboard Programmierung
    Antworten: 11
    Letzter Beitrag: 03-11-14, 17:26
  5. Cobol/400 - "Fett", "Unterstreichen" als HEX-Wert
    By RLurati in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 05-08-14, 10:10

Berechtigungen

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