[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Aug 2006
    Beiträge
    2.077

    SQL Denkanstoss gesucht

    Hallo *all,

    steh im Wald und das Rehlein sagt Du zu mir....

    CREATE FUNCTION /*Mail für RP-Trade 27.08.15 12:39*/
    email3( PARARTNR dec(6), VERTRETER dec(3) ) RETURNS
    VARCHAR(80) LANGUAGE SQL READS SQL DATA BEGIN
    DECLARE RETURNVAL VARCHAR ( 80 ) NOT NULL DEFAULT ' ' ;
    DECLARE work VARCHAR ( 100 ) NOT NULL DEFAULT ';' ;
    FOR CSRC1 AS C1 CURSOR
    FOR SELECT a4mail
    FROM adr04pf
    WHERE a4kto = PARARTNR and a4sts = 0
    and a4fa = 1 and a4edua = 'A10'
    DO SET work = ';' concat rtrim(a4mail) ;
    END FOR ;
    set returnval = ltrim(work) concat case
    when vertreter = 953 then ',Ulrich@xxx;'
    when vertreter = 914 then ',Georg@xxx;'
    when vertreter = 922 then ',Martin@xxx;'
    when vertreter = 961 then ',Michael@xxx;'
    else ';' end;
    RETURN LTRIM(RETURNVAL);
    END

    Habe nun das Problem das evtl. a4mail keine E-Mail Adresse zurückkommt. Dann ist der String nachher: ",Michael@xxx;" Wenn aber eine Adresse da ist sieht es so aus: "Adresse@xyz.de,Michael@xxx,"

    Ich möchte aber das führende "," weg haben wenn der Kunde keine E-Mail Adresse hat.

    Sprich wenn a4mail = leer dann "Michael@xx," ansonsten ",Michael@xxx;"

    Hatte jetzt in der SQL-Referenz nachgesehen "DB2 Universal Database for iSeries SQL Programming Concepts" aber was ich suche ist quasi eine Auflistung welche Befehle es alles gibt dich ich dort benutzen kann.

    Kann mir da einer mal sagen wo es lang geht.

    GG

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.254
    wie wärs mit:

    Return strip(ltrim(returnval), leading, ',')
    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
    Aug 2006
    Beiträge
    2.077
    Lass mich raten, das geht unter V5R4 noch nicht oder......

    GG

    Hatt jetzt nochmal probiert when vertreter = 1 and a4mail is not null then x
    when vertreter = 1 then y

    Nur steigt der beim ersten gefunden when aus und ignoriert den Rest..

    Rehlein es wird dunkel ich bleib im Wald bei Dir........

    GG

  4. #4
    Registriert seit
    Nov 2003
    Beiträge
    2.309
    Da gibts doch sicher auch ein IF als SQL-Anweisung ...

  5. #5
    Registriert seit
    Sep 2015
    Beiträge
    10
    Was soll jetzt eigentlich der Delimiter zwischen den Mail-Adressen sein: ',' oder ';'. Ich nehme mal ';' an.
    Probiers mal mit einer Änderung des FOR-Bodys:

    DO
    SET work = work || rtrim(a4mail) || ';';
    END FOR;
    vorher natürlich work mit '' initialisieren.
    Beim abschließenden dranhängen der Verteter-EMail dann je Verterter ergänzen mit:
    when vertreter = 952 then 'Ulrich@xxx;'

    Dann sollte für einen Kunden sowohl keine Mailadresse, eine Maile-ADresse oder mehrere Mailadressen gehen.

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.877
    Lass mich raten, das geht unter V5R4 noch nicht oder......
    Code:
    Return strip(ltrim(returnval), leading, ',')
    Die Syntax ist eigentlich uralt und konnte schon in den 4er Releases eingesetzt werden.
    Besser ist es allerdings statt STRIP die Funktion TRIM zu verwenden.
    Das Beispiel entfernt das erste führende Komma.
    Code:
    RETURN TRIM(Leading ',' from LTRIM(RtnValue));
    Aber wolltest Du nicht, sofern der Rückgabe-Wert leer ist, dass dann nur Michael@... drin steht?
    Dann könntest Du vor dem Return noch eine Case oder If-Anweisung einbauen:

    Code:
     IF Coalesce(RETURNVAL, ' ') = ' ' THEN SET RETURNVALUE = 'Michael@...';
     END IF;
     RETURN TRIM(Leading ',' from LTRIM(RETURNVAL));
    Warum nimmst Du die 4 Vertreter nicht direkt in die WHERE-Klausel auf, so dass auch nur diese 4 Vertreter ausgewählt werden?
    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

  7. #7
    Registriert seit
    Aug 2006
    Beiträge
    2.077
    Zitat Zitat von GruberWolfgang Beitrag anzeigen
    Was soll jetzt eigentlich der Delimiter zwischen den Mail-Adressen sein: ',' oder ';'. Ich nehme mal ';' an.
    Probiers mal mit einer Änderung des FOR-Bodys:

    DO
    SET work = work || rtrim(a4mail) || ';';
    END FOR;
    vorher natürlich work mit '' initialisieren.
    Beim abschließenden dranhängen der Verteter-EMail dann je Verterter ergänzen mit:
    when vertreter = 952 then 'Ulrich@xxx;'

    Dann sollte für einen Kunden sowohl keine Mailadresse, eine Maile-ADresse oder mehrere Mailadressen gehen.

    Hallo,
    dummerweise nimmt das Importprogramm das ";" als Trennzeichen deswegen muß ich das "," benutzen.

    GG

  8. #8
    Registriert seit
    Aug 2006
    Beiträge
    2.077
    Hallo,
    ich bekomme beim strip immer einen Syntaxfehler dachte deswegen das der unter V5R4 nicht geht.
    Return strip(ltrim(returnval), leading, ',')

    Nachrichten-ID . . . . : SQL0104


    Nachricht . . . : Token STRIP ungültig. Gültige Token: (.

    Ursache . . . . : Bei Token STRIP wurde ein Syntaxfehler entdeckt. Token

    Laut Doku
    >>-STRIP--(--string-expression--+-----------------------------------------+--)-><
    '-,--+-BOTH-----+--+--------------------+-'
    +-B--------+ '-,--strip-character-'
    +-LEADING--+
    +-L--------+
    +-TRAILING-+
    '-T--------'
    sollte es doch passen.

    BTW. der Vertreter wird ja mit übergeben und ist nicht Ergebnis der Suche.

    Benutze jetzt das RETURN TRIM(Leading ',' from LTRIM(Returnval));

    Danke für die Hilfe, jetzt ist das arme Rehlein wieder allein im Wald, aber so wie ich mich kenne werde ich es bald wieder besuchen.....

    GG

    Wobei wenn ich jetzt nochmal drüber nachdenke, hätte ich die Initalisierung mit den Vertretern an den Anfang stellen sollen. Tja, wenn man nur Rehlein zum diskutieren hat dauert es manchmal länger...

Similar Threads

  1. SQL laufende Nr. Denkanstoss gesucht. V5R4
    By KingofKning in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 29-07-14, 19:06

Berechtigungen

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