[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    May 2005
    Beiträge
    103

    Question 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

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.250
    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
    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
    May 2005
    Beiträge
    103
    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 ??

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.250
    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.
    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

  5. #5
    Registriert seit
    May 2005
    Beiträge
    103
    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 ???

  6. #6
    Registriert seit
    Apr 2005
    Beiträge
    104
    Ich würde dafür eine Skript-Sprache benutzen, also ein Skipt schreiben, das interpretiert wird.

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.877
    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
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  8. #8
    Registriert seit
    May 2005
    Beiträge
    103

    Thumbs up

    Manchmal sieht man vor lauter Bäumen den Wald nicht !!!!

    Genau das war's !!!!


    VIELEN DANK !!!

Similar Threads

  1. SQL mit variablen Tabellennamen
    By THH in forum NEWSboard Programmierung
    Antworten: 18
    Letzter Beitrag: 19-10-06, 14:16
  2. sql select mit zusätzl. Feldern
    By rr2001 in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 07-07-06, 09:56
  3. Cobol-Programm mit Embedded SQL (SELECT CASE)
    By klausgkv in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 08-06-06, 13:47
  4. 2 Dateien mit SQl verknüpfen, gleiche Feldnamen
    By marcel331 in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 03-04-06, 12:45
  5. Satzanzahl Select (embedded SQL)
    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
  •