-
"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
-
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.
Similar Threads
-
By Peet in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 27-05-19, 12:56
-
By oulbrich in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 15-11-17, 11:38
-
By Edi in forum IBM i Hauptforum
Antworten: 8
Letzter Beitrag: 07-11-14, 07:52
-
By dschroeder in forum NEWSboard Programmierung
Antworten: 11
Letzter Beitrag: 03-11-14, 16:26
-
By RLurati in forum NEWSboard Programmierung
Antworten: 1
Letzter Beitrag: 05-08-14, 09:10
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks