-
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
-
wie wärs mit:
Return strip(ltrim(returnval), leading, ',')
-
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
-
Da gibts doch sicher auch ein IF als SQL-Anweisung ...
-
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.
-
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?
-
Zitat von GruberWolfgang
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
-
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
-
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
-
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