[NEWSboard IBMi Forum]

Thema: SQLRPGLE

Hybrid View

  1. #1
    Registriert seit
    Jan 2001
    Beiträge
    850

    SQLRPGLE

    Hallo zusammen,

    in einem sqlrpgle soll in der Where Bedingung eine
    In Abfrgae durchgeführt werden z.B:

    C/EXEC SQL
    C+ DECLARE
    C+ SELECT
    C+ FROM
    c+ where
    c*** laender in ('AU', 'D' , 'NL')
    c+ laender in :wk2

    Die Variable wk2 enthält folgenden Inhalt
    WK2 = '('AU' , 'NL' , 'D') '

    Leider klappt die SQL Abfrage nicht.

    Kann man keine IN Abfrage mit einer Variablen durchführen ?

    Gruss an alle
    Michael

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    So geht das leider nicht. Du musst die Anzahl möglicher Inhalte per Programm bereits vorsehen und mehrere Variablen benennen:

    where ... laender in (:vin1, :vin2, :vin3, ...) ...
    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 2001
    Beiträge
    850
    Hallo Baldur,

    okay, vielen Dank das klappt.

    Ich habe aber ein Arrary DIM(99) mit den evtl vorkommenden
    Länderkürzel. Wobei 1 bis n Elenente gefüllt sein können.
    Mal sehen wie man soetwas machen könnte.

    Gruss
    Michael

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Hallo Michael,

    hier noch eine etwas unkonventionelle Methode. Du must nur den String entsprechend aufbereiten. Achtung der String sollte mit Komma beginnen und enden:
    PHP-Code:
      /Free
         String 
    ',D,E,F,DK,CH,GB,USA,';
     /
    End-Free
    C
    /Exec SQL
    C
    + Declare .....
    C+     Select LAENDER, ....
    C+        from MyTable
    C
    +        where :String like '%,' concat TRIM(LAENDERconcat ',%'
    C/End-Exec 
    Wenn ich mich jetzt nicht vertippt habe, sollte es funktionieren. Performancemäßig dürfte es allerdings nicht der Renner sein.

    Birgitta
    Birgitta Hauser

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

  5. #5
    Registriert seit
    Jan 2001
    Beiträge
    850
    Hallo zusammen,

    danke für die Tipps. Ich habe es jetzt so gelöst:

    where
    laender in ( :wkdst1 , :wkdst2 , :wkdst3, :wkdst4 , :wkdst5 ,
    :wkdst6 , :wkdst7 , :wkdst8, :wkdst9 , :wkdst10 ,
    :wkdst11, :wkdst12, :wkdst13, :wkdst14 , :wkdst15 ,
    :wkdst16, :wkdst17, :wkdst18, :wkdst19 , :wkdst20 ,
    :wkdst21, :wkdst22, :wkdst23, :wkdst24 , :wkdst25 ,
    :wkdst26, :wkdst27, :wkdst28, :wkdst29 , :wkdst30
    )

    wobei es dabei egal ist ob ein Wert in den Feldern steht. Die Felder die auf Blank stehen werden wohl ignoriert.

    Viele
    Grüße

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Ignoriert ist falsch !
    Solange dein Feld "laender" keine Blanks enthält ist das korrekt.
    Ggf. solltest du die nicht benötigten Felder mit *HIVAL initialisieren.
    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

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    *HIVAL?!

    Was aber wenn man auch Sätze hat in denen LAENDER mit *HIVAL belegt sind?

    Dann ist die Lösung genauso hinfällig, wie wenn man *Blanks für die nicht initialisierten Elemente verwenden würde!

    Deshalb würde ich die nicht belegten Elemente mit dem einem ausgewählten Länder-Kennzeichen (z.B. dem letzten oder dem ersten ausgewählten Wert) auffüllen. Der Optimizer sollte erkennen, dass der gleiche Wert mehrfach angegeben wurde.

    Birgitta
    Birgitta Hauser

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

  8. #8
    Registriert seit
    Jun 2005
    Beiträge
    16
    Hallo,

    ich würde den Variablen die *BLANKS als Inhalt haben einen hexadecimalen Wert zuweisen, einen Wert der keinem Zeichen entspricht.
    Damit ist sichergestellt, daß nicht ungewollt Sätze abgerufen werden, die eigentlich nicht gewünscht sind.

Similar Threads

  1. Anzeigervariable im SQLRPGLE
    By Jenne in forum NEWSboard Programmierung
    Antworten: 10
    Letzter Beitrag: 06-06-07, 10:10
  2. sqlrpgle
    By guru30 in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 22-02-06, 14:53
  3. *zoned bei SQLRPGLE Programm
    By Stefan_Sk in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 12-07-05, 13:04
  4. SQLRPGLE - Umwandlungsparameter?
    By Tobse77 in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 24-05-05, 08:56
  5. Suche SQLRPGLE Beispiel-Code
    By WeKaSys in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 15-10-04, 11:19

Berechtigungen

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