-
SQL Funktion liefert falsches Ergebnis
Ich verwende folgende Funktion zur Ermittlung von Warengruppen:
CREATE FUNCTION SWGWA.GetWagrString (
PARFir Char(3), PARKdnr Char(8) )
RETURNS VARCHAR(1024)
LANGUAGE SQL
NOT DETERMINISTIC
READS SQL DATA
CALLED ON NULL INPUT
BEGIN
DECLARE RETURNVAL VARCHAR ( 1024 ) NOT NULL DEFAULT ' ' ;
FOR CSRC1 AS C1 CURSOR
FOR SELECT wagr
FROM SWKWS
WHERE FIR = PARFir
and KDNR = ParKdnr
DO SET ReturnVal = ReturnVal CONCAT '\' CONCAT trim(CsrC1.wagr);
END FOR ;
RETURN LTRIM(ReturnVal) ;
END;
Der Testaufruf bringt aber einen leeren Rückgabewert:
-- Test
select distinct
fir, kdnr, swgwa.GetWagrString(fir, kdnr) as Warengruppen
from swgwa.swkds
where fir='001' and kdnr='010446';;
-- Ergebnis:
Firma Kunde WARENGRUPPEN
001 010446
******** Datenende ********
Wenn ich die Werte direkt mit Select auswähle, bekomme ich aber ein richtiges Ergebnis:
SELECT wagr FROM SWKWS WHERE FIR='001' and KDNR = '010446';;
Wgr
S
SA
W
******** Datenende ********
Woran kann das liegen?
Vielen Dank für eure Hilfe
-
Hi,
werden bei der Übergabe der Parameter auch alle Stellen gefüllt ?
evtl. ein Trim auf die Input Variablen machen
PARFir , ParKdnr
gruß
Michael
-
Probier mal folgendes:
Code:
DO SET ReturnVal = trim (ReturnVal) CONCAT '\' CONCAT trim(CsrC1.wagr);
lg Andreas
-
Warum so kompliziert?
Du brauchst keinen Cursor:
return (select ....);
-
Return SELECT gibt eine Tabelle zurück!
Das heißt Äpfel mit Birnen zu vergleichen!
Die Funktion jedoch verknüpft die einzelnen Warengruppen zu einem einzigen String und gibt diesen String zurück!
Gibt es bei der Ausführung irgendwelche Fehlermeldungen im Joblog? Am besten Du führst vor Ausführung des SQL Statements zunächst einen STRDBG (ohne weitere Parameter-Übergabe) aus und schaust dann ins Joblog.
Birgitta
-
Ich meine ja auch nicht die Tabelle sondern das ergebnis analog eines Singlesubselects:
return (
(select abc concat def from mytable where ...)
)
-
erledigt
Der Hinweis von mk mit dem Trim in der Funktion war die Lösung:
... WHERE FIR = trim(PARFir)
and KDNR = trim(ParKdnr)
...
Danke an euch alle
-
Dass der Trim von Erfolg gekrönt wird spricht gegen eine korrekte Parameterübergabe. Wenn diese ohne führende Leerzeichen erfolgt dann muss es auch ohne klappen da Leerzeichen am Ende nicht relevant sind.
Aber ein scalarer Subselect wäre trotzdem einfacher.
-
Zitat von Fuerchau
Aber ein scalarer Subselect wäre trotzdem einfacher.
Das musst Du mal erklären, wie Du mit einem skalaren Subselect die Warengruppen über mehrere (unbestimmt viele) Zeilen als String verknüpfen und dann ausgeben willst!
Birgitta
-
Ja OK, das habe ich dann doch überlesen.
Aber gabs da nicht was mit recursiver CTE in einem anderen Beitrag?
-
Zitat von Fuerchau
Ja OK, das habe ich dann doch überlesen.
Aber gabs da nicht was mit recursiver CTE in einem anderen Beitrag?
Mit Recursiven CTEs geht so was und müsste etwa so aussehen:
Code:
with x as (SELECT ROW_NUMBER() over(partition by FirNr, KndNr ORDER BY rrn(a)) Seq,
a.*
FROM Table1 a),
Rec (FirNr, KndNr, Wagr, Seq)
as ( select FirNr, KndNr, x.Wagr, Seq from x where Seq = 1
union all
select x.FirNr, x.KndNr concat ' ' concat Rec.WaGr,
Rec.Seq + 1
from x join Rec on x.FirNr = Rec.FirNr
and x.KndNr = Rec.KndNr
and x.Seq = Rec.seq + 1),
y as (select FirNr, KndNr, Max(Seq) Seq
From Rec
Group By FirNr, KndNr)
select rec.FirNr, rec.KndNr, WaGr
from Rec join y Using (FirNr, KndNr, Seq )
Ob das allerdings einfacher als die kleine UDF ist wage ich zu bezweifeln.
Birgitta
Similar Threads
-
By Booley in forum IBM i Hauptforum
Antworten: 6
Letzter Beitrag: 30-03-12, 12:37
-
By mwithake in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 04-08-09, 14:57
-
By lyrics in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 24-08-06, 12:10
-
By steven_r in forum NEWSboard Programmierung
Antworten: 1
Letzter Beitrag: 01-06-06, 12:16
-
By GHoffmann in forum IBM i Hauptforum
Antworten: 0
Letzter Beitrag: 07-07-05, 09:18
Tags for this Thread
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