Hallo *all,
ich habe mir eine UDF geschrieben die mir kundenspezifische Preise ermitteln soll.

Dummerweise läuft das Teil auf Fehler.

Fehlermeldung
Code:
 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:

Code:
 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