-
SQL - Select mit variablen Feldnamen
Hallo zusammen !!
Bin ein ziemlicher Neuling, was SQL-Programmierung anbelangt.
Ich habe nun allerdings die Notwendigkeit in meinem RPG-Programm einige SQL-Statements einzubauen.
Folgende Ausgangslage:
Eine Physische Datei mit über 5000 Felder bildet eine Berechtigungsstruktur verschiedener Menüpunkte pro User ab.
Folgender Aufbau:
Username, A0001, A0002, .... A5900
Hierbei stellt jedes Feld einen Menüpunkt dar. Wenn man jetzt z. B. wissen möchte, welcher Benutzer den Menüpunkt 810 hat, so kann man recht einfach über RUNQRY abfragen: A0810 EQ '1' !!
Nun soll dies in ein Dialogprogramm eingebunden werden. Der Benutzer soll in ein Eingabefeld der DSPF den gewünschten Menüpunkt eingeben können (z. B. 810) und das Programm passt entsprechend auf den Feldnamen der abzufragenden Datei an -> 'A0810'
Ich möchte also per SQL abfragen:
SELECT * FROM DATEI WHERE A0810 = '1'
bzw.
SELECT * FROM DATEI WHERE FELDNAME = '1'
Wer kann mir weiterhelfen
MfG,
Tobias
-
Dies geht nur mit dynamischem SQL:
declare xxx cursor for yyy
prepare yyy from :mystmt
open xxx
fetch xxx into ...
close xxx
xxx = dein Cursorname
yyy = ein Statementname
mystmt = eine Programmvariable die den vollständigen Select enthält
Ansonsten ist das Design dieser Tabelle eher fragwürdig
-
Hallo Fuerchau,
danke für die schnelle Antwort.
Sehr fragwürdig, ich weiß... aber sie existiert so nun mal...
Mit prepare hab ich bisher noch nie gearbeitet..
Mein SQL-Statement sieht folgendermaßen aus:
MPA = Variable mit Feldinhalt (z. B. 'A0810')
C/EXEC SQL
C+ DECLARE C1 CURSOR FOR SELECT * FROM LIB/FILE WHERE MPA = '1'
C/END-EXEC
Was genau ist mit Statementname gemeint?
Gem. deinem Tip sollte es also folgendermaßen aussehen(?!):
C/EXEC SQL
C+ DECLARE C1 CURSOR FOR YYY
C/END-EXEC
C/EXEC SQL
C+ PREPARE YYY FOR :VAR
C/END-EXEC
wobei :VAR = 'SELECT * FROM LIB/FILE WHERE' +Eingabevariable +'= "1"'
Richtig ??
-
Im Prinzip ja, allerdings solltest du einen eindeutigen Cursor- und Statementnamen verwenden und nicht YYY.
Ein Cursor kann auch nicht umdefiniert werden, nimm also C2 oder was anderes.
-
Danke, es funktioniert (fast)!!
Allerdings möchte ich aus Gründen der Performance nicht alle Felder selektieren, sonder nur das eine Feld, das ich im Programm benötige. (SIMUSR)
Wenn ich nun aber das SQL-Statement
SELECT * FROM VOGIO/WUSIMSEC WHERE A0810 = '1'
durch dieses
SELECT SIMUSR FROM VOGIO/WUSIMSEC WHERE A0810 = '1'
ersetze, so funktioniert die Abfrage nicht mehr !?!?!
Das gleiche Statement in STRSQL aufgerufen, funktioniert wie erwartet tadellos.
Selbst wenn ich das jeweilige Feld, das ich im WHERE-Teil abfrage zusätzlich auswähle, also
SELECT SIMUSR, A0810 FROM VOGIO/WUSIMSEC WHERE A0810 = '1'
so funktioniert es dennoch nicht !!!!
Woran liegt das ???
-
Ich würde dafür eine Skript-Sprache benutzen, also ein Skipt schreiben, das interpretiert wird.
-
Hallo Tobse77,
Wenn Du anstatt SELECT *, Select Feld bzw. Felder angibst, musst Du natürlich auch die Ausgabe-Felder oder die Datenstruktur, die Du im Fetch angibst entsprechend anpassen!
Birgitta
-
Manchmal sieht man vor lauter Bäumen den Wald nicht !!!!
Genau das war's !!!!
VIELEN DANK !!!
Similar Threads
-
By THH in forum NEWSboard Programmierung
Antworten: 18
Letzter Beitrag: 19-10-06, 14:16
-
By rr2001 in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 07-07-06, 09:56
-
By klausgkv in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 08-06-06, 13:47
-
By marcel331 in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 03-04-06, 12:45
-
By Schorsch in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 08-09-05, 15:22
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