KingofKning
15-08-14, 14:53
Hallo *all,
ich habe mir eine UDF geschrieben die mir kundenspezifische Preise ermitteln soll.
Dummerweise läuft das Teil auf Fehler.
Fehlermeldung
Nachrichten-ID . . . . : SQL0305 Bewertung . . . . . . : 30
Nachrichtenart . . . . : Diagnose
Sendedatum . . . . . . : 15.08.14 Sendezeit . . . . . . : 15:45:56
Nachricht . . . : Anzeigervariable erforderlich.
Ursache . . . . : Eine Anweisung FETCH, eine eingebettete Anweisung SELECT,
eine Anweisung CALL, GET DESCRIPTOR, SET oder VALUES INTO hatte einen
Nullwert zur Folge, für Host-Variable SQLP_L2.RETURNVAL wurde jedoch keine
Anzeigervariable angegeben. Die relative Position der Host-Variablen in der
Klausel INTO oder der Parameterliste ist 2. Ist der Name der Host-Variablen
Die UDF sieht so aus:
CREATE FUNCTION rptrade/artpreis3
( ARTIKELNR dec(10),
Kundennr dec(10)
) RETURNS
CHAR(10) LANGUAGE SQL READS SQL DATA BEGIN
DECLARE RETURNVAL CHAR ( 10 ) NOT NULL DEFAULT '0,00' ;
DECLARE preis1 dec ( 10 ) ;
DECLARE preis2 dec ( 10 ) ;
FOR CSRC1 AS C1 CURSOR
FOR SELECT SOEIPR
FROM rptrade/artpreis1
where SOID2 = ARTIKELNR
and (sodnbi = 99999999
or sodnbi >= YEAR(CURRENT DATE)*10000 +
MONTH(CURRENT DATE)*100 +
DAY(CURRENT DATE))
order by soid2, sodnbi
desc fetch first row only
DO SET preis1 = SOEIPR;
END FOR ;
FOR CSRC1 AS C1 CURSOR
FOR SELECT SOEIPR
FROM rptrade/artpreis2
where SOID4 = ARTIKELNR
and soid1 = kundennr
and (sodnbi = 99999999
or sodnbi >= YEAR(CURRENT DATE)*10000 +
MONTH(CURRENT DATE)*100 +
DAY(CURRENT DATE))
order by soid4, sodnbi
desc fetch first row only
DO SET preis1 = SOEIPR;
END FOR ;
if preis2 > 0 then set preis1 = preis2 ; end if ;
SET RETURNVAL = cast(preis1 as char(10));
RETURN LTRIM(RETURNVAL) ;
END
Jetzt vermute ich ja mal das ein SQL Statement kein Ergebniss liefert und daher z.B. Preis2 nicht gefüllt ist.
Was will er mir mit dem Stichwort Anzeigevariable sagen?
Für Hilfe dankbar
ich habe mir eine UDF geschrieben die mir kundenspezifische Preise ermitteln soll.
Dummerweise läuft das Teil auf Fehler.
Fehlermeldung
Nachrichten-ID . . . . : SQL0305 Bewertung . . . . . . : 30
Nachrichtenart . . . . : Diagnose
Sendedatum . . . . . . : 15.08.14 Sendezeit . . . . . . : 15:45:56
Nachricht . . . : Anzeigervariable erforderlich.
Ursache . . . . : Eine Anweisung FETCH, eine eingebettete Anweisung SELECT,
eine Anweisung CALL, GET DESCRIPTOR, SET oder VALUES INTO hatte einen
Nullwert zur Folge, für Host-Variable SQLP_L2.RETURNVAL wurde jedoch keine
Anzeigervariable angegeben. Die relative Position der Host-Variablen in der
Klausel INTO oder der Parameterliste ist 2. Ist der Name der Host-Variablen
Die UDF sieht so aus:
CREATE FUNCTION rptrade/artpreis3
( ARTIKELNR dec(10),
Kundennr dec(10)
) RETURNS
CHAR(10) LANGUAGE SQL READS SQL DATA BEGIN
DECLARE RETURNVAL CHAR ( 10 ) NOT NULL DEFAULT '0,00' ;
DECLARE preis1 dec ( 10 ) ;
DECLARE preis2 dec ( 10 ) ;
FOR CSRC1 AS C1 CURSOR
FOR SELECT SOEIPR
FROM rptrade/artpreis1
where SOID2 = ARTIKELNR
and (sodnbi = 99999999
or sodnbi >= YEAR(CURRENT DATE)*10000 +
MONTH(CURRENT DATE)*100 +
DAY(CURRENT DATE))
order by soid2, sodnbi
desc fetch first row only
DO SET preis1 = SOEIPR;
END FOR ;
FOR CSRC1 AS C1 CURSOR
FOR SELECT SOEIPR
FROM rptrade/artpreis2
where SOID4 = ARTIKELNR
and soid1 = kundennr
and (sodnbi = 99999999
or sodnbi >= YEAR(CURRENT DATE)*10000 +
MONTH(CURRENT DATE)*100 +
DAY(CURRENT DATE))
order by soid4, sodnbi
desc fetch first row only
DO SET preis1 = SOEIPR;
END FOR ;
if preis2 > 0 then set preis1 = preis2 ; end if ;
SET RETURNVAL = cast(preis1 as char(10));
RETURN LTRIM(RETURNVAL) ;
END
Jetzt vermute ich ja mal das ein SQL Statement kein Ergebniss liefert und daher z.B. Preis2 nicht gefüllt ist.
Was will er mir mit dem Stichwort Anzeigevariable sagen?
Für Hilfe dankbar